Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проблема посылки сообщения окну

9.8K
07 марта 2008 года
eng
22 / / 02.10.2005
Мне нужно чтоб процедура ReDraw вызывалась в любое свободное время работы программы. Делаю я это так:
Код:
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 не вызывается ни разу.
251
07 марта 2008 года
SkyMаn
1.7K / / 31.07.2007
>>в любое свободное время работы программы
Это когда именно? Согласно сообщения WM_COMMAND? Как вы влияете на данное окно? Событие ловится? Поставтьте отдадку и проследите, где стопорит.
9.8K
07 марта 2008 года
eng
22 / / 02.10.2005
Программа выводит в диалоговое окно надписи каждые 2 секунды и при этом следит за нажатием на кнопку F1. Вот процедура ReDraw как раз выводит эти надписи. Я бы мог реализовать это с помощью цикла, но тогда следить за нажатием клавиш не получилось бы.
251
08 марта 2008 года
SkyMаn
1.7K / / 31.07.2007
А где вызов стандартной функции обработки? Ты ведь все мессаги не обрабатываешь - отдай это дело стандартной процедуре, не жадничай :)
9.8K
08 марта 2008 года
eng
22 / / 02.10.2005
Я диалоговое окно из ресурсов загружаю с помощью DialogBox, поэтому запуск стандартной процедуры не нужен. Стандартная процедура вызывается сама после вызова процедуры обработки сообщений если проц обр сообщ возвращает значение false.
87
08 марта 2008 года
Kogrom
2.7K / / 02.02.2008
Цитата: eng
Программа выводит в диалоговое окно надписи каждые 2 секунды ....


А таймер используете? Вот в нём и вызывайте данную функцию. А лучше при обработки сообщения WM_PAINT, а при обработке сообщения таймера вызывать перерисовку.

А в вашей программе, если вы выберите пункт меню или еще произведёте действие для вызова события WM_COMMAND, у вас получится бесконечный цикл...

342
22 апреля 2008 года
Yos
209 / / 21.06.2003
1. SendMessage всегда ждет завершения обработки сообщения, чтобы не ждать - PostMessage...

2. Пока не будет закончена обработка WM_INITDIALOG ни о каком WM_COMMAND даже речи быть не может...

3. WM_PAINT в диалоговые окна не передается...

PS Такого я уже давно не видел :) особенно когда текущая рекурсия весчь относящаяся к темным электрическим силам...
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог