Здравствуйте Dancer, Вы писали:
D>Да прототип-то я из книжки взял,на этот поменял — не помогает. D>У меня диалоговое приложение, в момент посылки сообщения окно, конечно же, активно. Месагу посылает рабочий поток, в котором производятся вычисления, когда нужно инициировать обновление экрана. Раньше у меня все было в одном месте — запускается поток, дальше в цикле while(::GetMessage(&message, NULL, 0, 0)) инициировалось обновление нужной области экрана и все было нормально. Потом я решил сделать специальный обработчик для своего сообщения, но не тут-то было! D>Я просто фигею, дорогая редакция! Это же должно быть очень просто, и в книжке написано, но не работает!
Здравствуйте, Dancer, Вы писали:
D>>>>>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так: d>
1.
В *.h — файл НУЖНО добавить МЕЖДУ
//}}AFX_MSG
И
DECLARE_MESSAGE_MAP()
обьявление функции, которая будет вызываться при получении сообщения
прототип:
afx_msg void OnSomethingMessage(...);
можно и без параметров.
2.
Написать ее определение в *.cpp
3.
В *.cpp вставить макрос ON_THREAD_MESSAGE(...) между
//}}AFX_MSG_MAP
Здравствуйте Dancer, Вы писали:
D>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так: D>добавляю к классу диалога метод
D>
D>а Сlass Withard сам добавляет ее описание в h-файл диалога, но не туда, где остальные обработчики описаны, а просто как public, например. D>Но когда я делаю PostMessage из другого потока, сообщение этой функцией не перехватывается, хотя основной процес сообщение получает, я проверял GetMessage. D>В чем тут может быть дело?
Здравствуйте Dancer, Вы писали:
D>Здравствуйте Кирпа В.А., Вы писали:
КВ>>Здравствуйте Dancer, Вы писали:
D>>>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так: D>>>добавляю к классу диалога метод
D>>>
D>>>а Сlass Withard сам добавляет ее описание в h-файл диалога, но не туда, где остальные обработчики описаны, а просто как public, например. D>>>Но когда я делаю PostMessage из другого потока, сообщение этой функцией не перехватывается, хотя основной процес сообщение получает, я проверял GetMessage. D>>>В чем тут может быть дело?
КВ>>А в карту сообщений добавить все-равно надо
КВ>>ON_MESSAGE(WM_USER + ..., OnThreadRedraw)
D>А куда это добавлять надо? D>Вставил в срр-файл диалога
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>
А почему ты посылаешь диалогу этот мессаг? У тебя что диалоговое приложение? Что в этот момент активнно окно диалога?
и второе
вообще-то прототип ф-ции такой
Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так:
добавляю к классу диалога метод
LONG CFractalDlg::OnThreadRedraw(UINT wParam, LONG lParam)
{ ...
return 0;
}
а Сlass Withard сам добавляет ее описание в h-файл диалога, но не туда, где остальные обработчики описаны, а просто как public, например.
Но когда я делаю PostMessage из другого потока, сообщение этой функцией не перехватывается, хотя основной процес сообщение получает, я проверял GetMessage.
В чем тут может быть дело?
Здравствуйте Кирпа В.А., Вы писали:
КВ>Здравствуйте Dancer, Вы писали:
D>>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так: D>>добавляю к классу диалога метод
D>>
D>>а Сlass Withard сам добавляет ее описание в h-файл диалога, но не туда, где остальные обработчики описаны, а просто как public, например. D>>Но когда я делаю PostMessage из другого потока, сообщение этой функцией не перехватывается, хотя основной процес сообщение получает, я проверял GetMessage. D>>В чем тут может быть дело?
КВ>А в карту сообщений добавить все-равно надо
КВ>ON_MESSAGE(WM_USER + ..., OnThreadRedraw)
А куда это добавлять надо?
Вставил в срр-файл диалога
Здравствуйте Кирпа В.А., Вы писали:
КВ>Здравствуйте Dancer, Вы писали:
D>>Здравствуйте Кирпа В.А., Вы писали:
КВ>>>Здравствуйте Dancer, Вы писали:
D>>>>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так: D>>>>добавляю к классу диалога метод
D>>>>
D>>>>а Сlass Withard сам добавляет ее описание в h-файл диалога, но не туда, где остальные обработчики описаны, а просто как public, например. D>>>>Но когда я делаю PostMessage из другого потока, сообщение этой функцией не перехватывается, хотя основной процес сообщение получает, я проверял GetMessage. D>>>>В чем тут может быть дело?
КВ>>>А в карту сообщений добавить все-равно надо
КВ>>>ON_MESSAGE(WM_USER + ..., OnThreadRedraw)
D>>А куда это добавлять надо? D>>Вставил в срр-файл диалога
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)) инициировалось обновление нужной области экрана и все было нормально. Потом я решил сделать специальный обработчик для своего сообщения, но не тут-то было!
Я просто фигею, дорогая редакция! Это же должно быть очень просто, и в книжке написано, но не работает!
Здравствуйте Кирпа В.А., Вы писали:
КВ>Здравствуйте Dancer, Вы писали:
D>>Да прототип-то я из книжки взял,на этот поменял — не помогает. D>>У меня диалоговое приложение, в момент посылки сообщения окно, конечно же, активно. Месагу посылает рабочий поток, в котором производятся вычисления, когда нужно инициировать обновление экрана. Раньше у меня все было в одном месте — запускается поток, дальше в цикле while(::GetMessage(&message, NULL, 0, 0)) инициировалось обновление нужной области экрана и все было нормально. Потом я решил сделать специальный обработчик для своего сообщения, но не тут-то было! D>>Я просто фигею, дорогая редакция! Это же должно быть очень просто, и в книжке написано, но не работает!
КВ>Код в студию!
Код выслан на мыло. В принципе, в сообщение мне его тоже будет вставить нетрудно, но так понятнее, мне кажется.
Здравствуйте Кирпа В.А., Вы писали:
КВ>Здравствуйте Dancer, Вы писали:
D>>Да прототип-то я из книжки взял,на этот поменял — не помогает. D>>У меня диалоговое приложение, в момент посылки сообщения окно, конечно же, активно. Месагу посылает рабочий поток, в котором производятся вычисления, когда нужно инициировать обновление экрана. Раньше у меня все было в одном месте — запускается поток, дальше в цикле while(::GetMessage(&message, NULL, 0, 0)) инициировалось обновление нужной области экрана и все было нормально. Потом я решил сделать специальный обработчик для своего сообщения, но не тут-то было! D>>Я просто фигею, дорогая редакция! Это же должно быть очень просто, и в книжке написано, но не работает!
КВ>Код в студию!
КВ>
Аааа!!! Колдун, шаман ! Заработало!
Спасибо!
Но как же я энтого не увидел сам ?!
А нельзя и мне объяснить, у меня такая же проблема?
Здравствуйте, Dancer, Вы писали:
D>Здравствуйте Кирпа В.А., Вы писали:
КВ>>Здравствуйте Dancer, Вы писали:
D>>>Здравствуйте Кирпа В.А., Вы писали:
КВ>>>>Здравствуйте Dancer, Вы писали:
D>>>>>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так: D>>>>>добавляю к классу диалога метод
D>>>>>
D>>>>>а Сlass Withard сам добавляет ее описание в h-файл диалога, но не туда, где остальные обработчики описаны, а просто как public, например. D>>>>>Но когда я делаю PostMessage из другого потока, сообщение этой функцией не перехватывается, хотя основной процес сообщение получает, я проверял GetMessage. D>>>>>В чем тут может быть дело?
КВ>>>>А в карту сообщений добавить все-равно надо
КВ>>>>ON_MESSAGE(WM_USER + ..., OnThreadRedraw)
D>>>А куда это добавлять надо? D>>>Вставил в срр-файл диалога
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>Я просто фигею, дорогая редакция! Это же должно быть очень просто, и в книжке написано, но не работает!
Здравствуйте, dandy, Вы писали:
D>Здравствуйте, Dancer, Вы писали:
D>>>>>>Как добавить в программу обработчик к-л пользовательского сообщения? Я сделал так: d>> D>1. D>В *.h — файл НУЖНО добавить МЕЖДУ D> //}}AFX_MSG D>И D>DECLARE_MESSAGE_MAP() D>обьявление функции, которая будет вызываться при получении сообщения D>прототип: D> afx_msg void OnSomethingMessage(...); D>можно и без параметров.
D>2. D>Написать ее определение в *.cpp
D>3.
D>В *.cpp вставить макрос ON_THREAD_MESSAGE(...) между D>//}}AFX_MSG_MAP
D>и D>END_MESSAGE_MAP()
D>4.
D>Вместо WM_USER нужно использовать WM_APP
D>5. D>Кажется, ничего не забыл.
D>С уважением, Андрей.