@Diffins

Почему ломается окно, созданное мной на win32 API при изменении его размеров?

Думаю проблема в этой части кода, но не могу ее отловить. Подскажите, пожалуйста.
Под "ломается" я подразумеваю то, что оно перестает отвечать на сообщения и исчезает рамка с крестиком, свернуть-развернуть и названием
case WM_PAINT:
		hdc = BeginPaint(hWnd, &ps);
		SetMapMode(hdc, MM_ISOTROPIC); //логические единицы отображаем, как физические
		SetWindowExtEx(hdc, 500, 500, NULL); //Длина осей
		SetViewportExtEx(hdc, xView, -yView, NULL); //Определяем облась вывода
		SetViewportOrgEx(hdc, xView / 6, yView / 1.1, NULL); //Начало координат
		Line(hdc, -10, 0, 100,0);
		Line(hdc, 0, -10, 0, 100);
		for (int i(0); i < 3; i++)
		{
			if (points[i][0] != NULL)
			{
				if (i == 1)
					SelectObject(hdc, hPenRed); //Объект делается текущим
				else
					SelectObject(hdc, hPenWhite); //Объект делается текущим
				Line(hdc, points[i][0] - lineSize + 1, points[i][1] - lineSize + 1, points[i][0] + lineSize, points[i][1] + lineSize);
				Line(hdc, points[i][0] + lineSize - 1, points[i][1] - lineSize + 1, points[i][0] - lineSize, points[i][1] + lineSize);
			}			
		}
		for (int i(1); i < 3; i++)
		{
			if (points[i][0] != NULL)
			{
				Line(hdc, points[i-1][0], points[i-1][1], points[i][0], points[i][1]);
			}
		}

		ValidateRect(hWnd, NULL); //Обновляем экран
		EndPaint(hWnd, &ps);
		break;
	case WM_LBUTTONDOWN:

		hdc = GetDC(hWnd);
		SetMapMode(hdc, MM_ISOTROPIC); //логические единицы отображаем, как физические
		SetWindowExtEx(hdc, 500, 500, NULL); //Длина осей
		SetViewportExtEx(hdc, xView, -yView, NULL); //Определяем облась вывода
		SetViewportOrgEx(hdc, xView / 6, yView / 1.1, NULL); //Начало координат
		Line(hdc, 0, 0, 30, 30);
		x = LOWORD(lParam); //узнаём координаты
		y = HIWORD(lParam);
		//Line(hdc, LOWORD(lParam) - LOWORD(lParam), HIWORD(lParam) - HIWORD(lParam), LOWORD(lParam), HIWORD(lParam));
		if (check < 3)
		{
			points[check][0] = x;
			points[check][1] = y;
			check++;

		}
		if (check <= 3)
		{
			if(check == 2)
				SelectObject(hdc, hPenRed); //Объект делается текущим
			else
				SelectObject(hdc, hPenWhite); //Объект делается текущим
			Line(hdc, x - lineSize + 1, y - lineSize + 1, x + lineSize, y + lineSize);
			Line(hdc, x + lineSize - 1, y - lineSize + 1, x - lineSize, y + lineSize);
		}
		if (check == 3)
		{
			Line(hdc, points[0][0], points[0][1], points[1][0], points[1][1]);
			Line(hdc, points[1][0], points[1][1], points[2][0], points[2][1]);
		}
		
		//закругляемся
		//обновляем окно
		ValidateRect(hWnd, NULL);
		//заканчиваем рисовать
		//EndPaint(hWnd, &ps);

		break;
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 1
Vapaamies
@Vapaamies
Разработчик будущей ОС для ПК размером 250 МБ
А ValidateRect в обработчике WM_PAINT зачем?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы