что окно следует обновить с
часть окна недопустима, с помощью вызова InvalidateRect или
InvalidateRgn. Эти две функции помещают в окно обновленную об-
ласть и уведомляют Windows, что окно следует обновить с помощью
сообщения WM_PAINT. Однако, Windows присваивает сообщению
WM_PAINT, которое оно посылает в ответ на эти вызовы функций,
низкий приоритет, поэтому, если вы хотите, чтобы окно обновлялось
немедленно, следует воздерживаться от вызова UpdateWindow.
Исправление ошибки
-----------------------------------------------------------------
Добавление в WMRButtonDown вызова InvalidateRect устранит
проблему. Функция InvalidateRect воспринимает три параметра:
идентифицирующий окно описатель окна, указатель на прямоугольную
область, отмечающий требующий обновления прямоугольник, и пара-
метр типа Boolean, который определяет, следует ли стирать прямоу-
гольную область. В качестве параметра, задающего указатель на
прямоугольную область, вы можете передать значение nil, указав
Windows, что к обновляемому прямоугольнику следует добавить все
окно. В следующем исходном коде показано, как выглядит
WMRButtonDown с несколькими добавленными вызовами функций:
void ScribbleWindow::WMRButtonDown(RTMessages);
{
InvalidateRect(HWindow, NULL, TRUE);
UpdateWindow(HWindow);
}
Проверка исправления
-----------------------------------------------------------------
Запустите программу ColorScribble и выйдите из нее, затем
выйдите в TDW. Когда вы вернетесь в Borland C++, внесите измене-
ния в WMRButtonDown, затем перекомпилируйте программу и запустите
TDeb 3.0 #3-3 = 84 =
Глава 20. Отладка резидентных программ и драйверов устройств