А нельзя и мне объяснить, у меня такая же проблема?
Здравствуйте, 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>Я просто фигею, дорогая редакция!
Это же должно быть очень просто, и в книжке написано, но не работает!