Поиск:

Ответ в темуСоздание новой темы Создание опроса
> До диалога не доходит сообщение, посылаемое из созданного им потока 
V
    Опции темы
ksili
Дата 20.2.2009, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



MFC-приложение с несколькими диалогами. 
Один из них при открытии создает и запускает поток. 
Этот поток при завершении посылает user-defined сообщение, на которое в диалоге есть обработчик.

Сообщение из потока посылается, но вот его обработчик никогда не вызывается. Вроде все делаю по найденным примерам.
Вот кратко код:
Код

UINT FW_UPDATE_CHECKED_MESSAGE = RegisterWindowMessage(L"FW_UPDATE_CHECKED_MESSAGE");

....


BEGIN_MESSAGE_MAP(CUpdateFWDlg, CBaseFWDlg)
......
    ON_MESSAGE(FW_UPDATE_CHECKED_MESSAGE, OnUpdateChecked)
END_MESSAGE_MAP()


......


void CUpdateFWDlg::_Update(void)
{
..............

            // заполняем структуру для передачи параметров в поток
    uParams.hwnd = this->GetSafeHwnd();    // передаем хэндл диалога, будет нужен для посылки сообщения

    updThread = AfxBeginThread(_UpdateProc, &uParams);
}

UINT __cdecl _UpdateProc( LPVOID pParam )
{
........................

            // пробовал и PostMessage и SendMessage - одинаковый результат

    //PostMessage(((_UpdateParams*)pParam)->hwnd,FW_UPDATE_CHECKED_MESSAGE, 0, 0);
    SendMessage(((_UpdateParams*)pParam)->hwnd,FW_UPDATE_CHECKED_MESSAGE, 0, 0);

    return 0;
}


LRESULT CUpdateFWDlg::OnUpdateChecked(WPARAM wParam, LPARAM lParam)
{
    // вот сюда управление и не попадает
...................

            return 0;


 - 
Может быть дело в том, что передается неверный hwnd? Вместо него я попробовал ещё 2 значения, указанных в MSDN - HWND_BROADCAST  и NULL. Результат тот же.


Это сообщение отредактировал(а) ksili - 20.2.2009, 10:01


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Andrey44
Дата 20.2.2009, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Посылай через PostMessage smile 


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ksili
Дата 20.2.2009, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Andrey44, пробовал


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Andrey44
Дата 20.2.2009, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1501
Регистрация: 4.12.2006
Где: На работе

Репутация: 12
Всего: 26



Интересно, ну тогда вот это PostThreadMessage


--------------------
????? ??, ??????? ?????.  smile 
PM MAIL WWW ICQ   Вверх
ksili
Дата 20.2.2009, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Уже разобрался. Оказывается вместо ON_MESSAGE надо использовать ON_REGISTERED_MESSAGE

Хотя в тех примерах, что я нашёл, было ON_MESSAGE


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Earnest
Дата 20.2.2009, 12:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



ksili, NULL вместо HWND  точно не поможет, да и BROADCAST тоже.
1) Чему равна константа FW_UPDATE_CHECKED_MESSAGE? В смысле, в допустимом диапазоне?
2) Когда заполняется структура uParams, диалог (окно) уже существует? 
3) Она у тебя, часом, не автоматическая?
4) посмотри hWnd в момент записи в структуру и в момент посылки сообщения и сравни.

И лучше пользоваться PostMessage, если не нужно ждать ответа: SendMessage между потоками может привести к взаимоблокировке.

Добавлено через 59 секунд
Цитата(ksili @  20.2.2009,  12:31 Найти цитируемый пост)
Оказывается вместо ON_MESSAGE надо использовать ON_REGISTERED_MESSAGE

Т.е. случай N 1. У них разные диапазоны и, соответственно, разные обработчики.


--------------------
...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0867 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.