Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 18.09.2019, 23:47   #1
LomionDK
Пользователь
 
Регистрация: 24.02.2019
Сообщений: 33
Репутация: 10
По умолчанию При нажатии на прямоугольник, менять цвет WinApi

Здравствуйте, есть задание. Всего на рабочей области 4 прямоугольника, при нажатии на прямоугольник, тот начинает менять цвета(зеленый-красный-синий-зеленый-...), т.е. циклично меняет цвет, пока не закрою программу, при нажатии на остальные прямоугольники должно происходить то же самое. Координаты считываю с файла. Так вот, сделал часть с считывания координат и постройкой прямоугольников, не знаю, как менять цвет. Пробовал использовать WM_LBUTTONDOWN, но что-то не помогло. Помогите пожалуйста.
Код:
Код:
#include <windows.h>
#include <iostream>
#include <cstdlib>
#include <fstream>
using namespace std;

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HDC hdc;
RECT rect;
HWND hMainWnd;
HBRUSH brush;
static HDC secondHdc;
UINT nIDEvent;
int selected_mark = 0;
PAINTSTRUCT ps;

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	MSG msg;
	WNDCLASSEX wc;

	char szClassName[] = "AppClass";
	wc.cbSize = sizeof(wc);
	wc.style = CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc = WndProc;
	wc.cbClsExtra = 0;
	wc.cbWndExtra = 0;
	wc.hInstance = hInstance;
	wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
	wc.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
	wc.lpszMenuName = NULL;
	wc.lpszClassName = szClassName;
	wc.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
	/*****************************************************************************************************************************/
	if (!RegisterClassEx(&wc)) {
		MessageBox(NULL, "Не удалось зарегистрировать класс окна", "Ошибка", MB_OK);
		return 0;
	}

	hMainWnd = CreateWindow(szClassName, "Программа", WS_SYSMENU | WS_MINIMIZEBOX, 0, 0, 1000, 1000, NULL, NULL, hInstance, NULL);

	if (!hMainWnd) {
		MessageBox(NULL, "Не удалось создать главное окно программы", "Ошибка", MB_OK);
		return 0;
	}
	ShowWindow(hMainWnd, nCmdShow);
	/*Функция GetMessage возвращает FALSE, если получит сообщение WM_QUIT. Во всех остальных случаях она вернёт TRUE.*/
	while (GetMessage(&msg, NULL, 0, 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}

	return msg.wParam;
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	switch (uMsg) {
	case WM_CREATE: {
		hdc = GetDC(hWnd);
		ReleaseDC(hWnd, hdc);
	}
	case WM_PAINT: {
		int x1, y1, x2, y2;
		ifstream fin;
		fin.open("text.txt");
		hdc = BeginPaint(hWnd, &ps);
		brush = CreateSolidBrush(RGB(250, 0, 0));
		for (int i = 0; i < 4; i++) {
			fin >> x1 >> y1 >> x2 >> y2;
			rect = { x1,y1,x2,y2 };
			FillRect(hdc, &rect, brush);
		} 
		fin.close();
		EndPaint(hWnd, &ps);
		break;
	}
	case WM_LBUTTONDOWN: {
		POINT point;
		GetCursorPos(&point);
		ifstream fin;
		fin.open("text.txt");
		int x1, y1, x12, y12, x2, y2, x22, y22, x3, y3, x32, y32, x4, y4, x42, y42;
		fin >> x1 >> y1 >> x12 >> y12 >> x2 >> y2 >> x22 >> y22 >> x3 >> y3 >> x32 >> y32 >> x4 >> y4 >> x42 >> y42;
		fin.close();
		if (point.x > x1 && point.y > y1 && point.x < x12 && point.y < y12) {
				
		}
		else if (point.x > x2 && point.y > y2 && point.x < x22 && point.y < y22) {

		}
		else if (point.x > x3 && point.y > y3 && point.x < x32 && point.y < y32) {

		}
		else if (point.x > x4 && point.y > y4 && point.x < x42 && point.y < y42) {

		}
		break;
	}

	case WM_CLOSE: {
		DestroyWindow(hWnd);	//посылает окну сообщение WM_DESTROY, после которого окна на экране уже нет
		break;
	}
	case WM_DESTROY: {
		PostQuitMessage(0);		//посылает сообщение WM_QUIT, после которого прекращается цикл обработки сообщений
		break;
	}
	default: {
		return DefWindowProc(hWnd, uMsg, wParam, lParam); //обработка сообщений по умолчанию
	}
	}

	return 0;
}
LomionDK вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как менять цвет? gedice Microsoft Office Excel 4 30.05.2016 10:50
C# ZedGraph как менять цвет в цикле Krasi Windows Forms 4 23.10.2015 11:21
var Key Press Delphi - при нажатии на клавиши менять цвет формы Grimnir Помощь студентам 6 29.03.2013 12:00
Как менять текст при нажатии кнопки Grots Помощь студентам 4 06.09.2011 16:38
Image не хочет цвет менять Roof Компоненты Delphi 3 04.08.2008 01:33


06:14.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.