INT_PTR WINAPI DlgProcShow(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
...
SendMessage(hwnd,WM_COMMAND,NULL,NULL);
}
break;
case WM_COMMAND:
ReDraw(hwnd);
break;
...
}
return 0;
}
void ReDraw(HWND hwnd)
{
...
SendMessage(hwnd,WM_COMMAND,NULL,NULL);
}
Проблема посылки сообщения окну
Мне нужно чтоб процедура ReDraw вызывалась в любое свободное время работы программы. Делаю я это так:
Это когда именно? Согласно сообщения WM_COMMAND? Как вы влияете на данное окно? Событие ловится? Поставтьте отдадку и проследите, где стопорит.
Программа выводит в диалоговое окно надписи каждые 2 секунды и при этом следит за нажатием на кнопку F1. Вот процедура ReDraw как раз выводит эти надписи. Я бы мог реализовать это с помощью цикла, но тогда следить за нажатием клавиш не получилось бы.
А где вызов стандартной функции обработки? Ты ведь все мессаги не обрабатываешь - отдай это дело стандартной процедуре, не жадничай :)
Я диалоговое окно из ресурсов загружаю с помощью DialogBox, поэтому запуск стандартной процедуры не нужен. Стандартная процедура вызывается сама после вызова процедуры обработки сообщений если проц обр сообщ возвращает значение false.
Цитата: eng
Программа выводит в диалоговое окно надписи каждые 2 секунды ....
А таймер используете? Вот в нём и вызывайте данную функцию. А лучше при обработки сообщения WM_PAINT, а при обработке сообщения таймера вызывать перерисовку.
А в вашей программе, если вы выберите пункт меню или еще произведёте действие для вызова события WM_COMMAND, у вас получится бесконечный цикл...
2. Пока не будет закончена обработка WM_INITDIALOG ни о каком WM_COMMAND даже речи быть не может...
3. WM_PAINT в диалоговые окна не передается...
PS Такого я уже давно не видел :) особенно когда текущая рекурсия весчь относящаяся к темным электрическим силам...