Это более конкретный вопрос, связанный с моим предыдущим.
У меня есть приложение, которое использует таймер. Код написан так, как обработчик my WM_TIMER
вызывает DialogBoxParam(...)
с некоторым пользовательским обработчиком сообщений (назовем его DlgProc
).
Это делается следующим образом:
case WM_TIMER:
{
// Рутина, которая отображает специальное окно сообщения
DisplayMessageBox (...);
вернуть 0;
} * +1010 *
Теперь, если я заставлю DlgProc
обрабатывать подобные сообщения (см. Код), это приведет к множеству диалоговых окон (по одному на WM_TIMER
вызов).
switch (msg)
{
case WM_INITDIALOG:
// (...)
return TRUE;
case WM_COMMAND:
// (...)
return TRUE;
return FALSE;
}
Но если я добавлю фиктивный обработчик WM_PAINT
(return TRUE;
) к своему DlgProc
, это приведет к ровно одному показанному DialogBox и 100% загрузке ЦП (потому что я получаю тонны WM_PAINT
сообщений).
Q:
Что можно сделать здесь, если я хочу, чтобы мое приложение показывало ровно ОДНО диалоговое окно и не загружало ЦП для обработки WM_PAINT? (я имею в виду подобное поведение, похожее на рисование уникального диалогового окна и полное приостановление родительского окна) .
Также было бы замечательно, если бы кто-то объяснил, что на самом деле происходит в этой ситуации и почему я получаю gazillions WM_PAINT
сообщений в мое диалоговое окно и почему их обработка (с return TRUE
) приводит к предотвращению создания других диалоговых окон ,
Спасибо.