Re[5]: пользовательское сообщение
От: Hux  
Дата: 10.09.03 15:39
Оценка:
А нельзя и мне объяснить, у меня такая же проблема?

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

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


КВ>>Здравствуйте 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);



D>Да прототип-то я из книжки взял,на этот поменял — не помогает.

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