Re[4]: пользовательское сообщение
От: Dancer Россия  
Дата: 05.04.02 09:21
Оценка:
Здравствуйте Кирпа В.А., Вы писали:

КВ>Здравствуйте Dancer, Вы писали:


D>>Здравствуйте Кирпа В.А., Вы писали:


КВ>>>Здравствуйте Dancer, Вы писали:


D>>>>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так:

D>>>>добавляю к классу диалога метод

D>>>>
D>>>>LONG CFractalDlg::OnThreadRedraw(UINT wParam, LONG lParam)
D>>>>{    ...
D>>>>     return 0;
D>>>>}
D>>>>


D>>>>а Сlass Withard сам добавляет ее описание в h-файл диалога, но не туда, где остальные обработчики описаны, а просто как public, например.

D>>>>Но когда я делаю PostMessage из другого потока, сообщение этой функцией не перехватывается, хотя основной процес сообщение получает, я проверял GetMessage.
D>>>>В чем тут может быть дело?

КВ>>>А в карту сообщений добавить все-равно надо


КВ>>>ON_MESSAGE(WM_USER + ..., OnThreadRedraw)


D>>А куда это добавлять надо?

D>>Вставил в срр-файл диалога

D>>
D>>BEGIN_MESSAGE_MAP(CFractalDlg, CDialog)
D>>    //{{AFX_MSG_MAP(CFractalDlg)
D>>    ON_WM_SYSCOMMAND()
D>>         ...................

D>>    ON_MESSAGE(WM_USER+5, OnThreadRedraw)

D>>    //}}AFX_MSG_MAP
D>>END_MESSAGE_MAP()
D>>


D>>в h-файл вставил прототип:


D>>
D>>//{{AFX_MSG(CFractalDlg)
D>>    virtual BOOL OnInitDialog();
D>>        ...

D>>        afx_msg LONG OnThreadRedraw(UINT wParam, LONG lParam);

D>>//}}AFX_MSG
D>>DECLARE_MESSAGE_MAP()
D>>


D>>Там же

D>>
D>>
D>>#define WM_THREADREDRAW        WM_USER + 5
D>>


D>>Но однако работать не стало. Может, я еще чего забыл?

D>>

КВ>А почему ты посылаешь диалогу этот мессаг? У тебя что диалоговое приложение? Что в этот момент активнно окно диалога?

КВ>и второе
КВ>вообще-то прототип ф-ции такой

КВ>afx_msg LRESULT OnThreadRedraw(WPARAM wParam, LPARAM lParam);



Да прототип-то я из книжки взял,на этот поменял — не помогает.
У меня диалоговое приложение, в момент посылки сообщения окно, конечно же, активно. Месагу посылает рабочий поток, в котором производятся вычисления, когда нужно инициировать обновление экрана. Раньше у меня все было в одном месте — запускается поток, дальше в цикле while(::GetMessage(&message, NULL, 0, 0)) инициировалось обновление нужной области экрана и все было нормально. Потом я решил сделать специальный обработчик для своего сообщения, но не тут-то было!
Я просто фигею, дорогая редакция! Это же должно быть очень просто, и в книжке написано, но не работает!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.