Я только начал изучать WTL и поэтому прошу прощения за столь ламерский вопрос, но тем не менее.
Ситуация следующая: у меня есть диалог с некторыми элементами пользовательского интерфейса на нём. Как научиться обрабатывать сообщения этих элементов управления? Ну, например когда пользователь что-то вводит в edit`е или изменяет состояние у radiobutton`а и т. д.?
Здравствуйте, Erik_, Вы писали:
E_>Доброго времени суток!
E_>Я только начал изучать WTL и поэтому прошу прощения за столь ламерский вопрос, но тем не менее. E_>Ситуация следующая: у меня есть диалог с некторыми элементами пользовательского интерфейса на нём. Как научиться обрабатывать сообщения этих элементов управления? Ну, например когда пользователь что-то вводит в edit`е или изменяет состояние у radiobutton`а и т. д.?
Обработчик WM_NOTIFY или WM_COMMAND. За ними скрывается семейство сообщений, так что надо проконсультироваться с MSDN. Обработка будет вестись в классе диалога.
Здравствуйте, Erik_, Вы писали:
E_>Доброго времени суток!
E_>Я только начал изучать WTL и поэтому прошу прощения за столь ламерский вопрос, но тем не менее. E_>Ситуация следующая: у меня есть диалог с некторыми элементами пользовательского интерфейса на нём. Как научиться обрабатывать сообщения этих элементов управления? Ну, например когда пользователь что-то вводит в edit`е или изменяет состояние у radiobutton`а и т. д.?
Обработать WM_NOTIFY и WM_COMMAND как сказали выше.
Для облегчения добавления обработчиков можно использовать
1. Встроенную систему в студии для добавления обработчиков комманд в диалогах.
2. WTLHelper.
Здравствуйте, glyph, Вы писали:
G> Обработчик WM_NOTIFY или WM_COMMAND. За ними скрывается семейство сообщений, так что надо проконсультироваться с MSDN. Обработка будет вестись в классе диалога.
Привожу кусок карты сообщений диалога, в котором реализована сия идея. Не работает . Я потому и спрашивать стал.
Здравствуйте, Erik_, Вы писали:
E_>Привожу кусок карты сообщений диалога, в котором реализована сия идея. Не работает . Я потому и спрашивать стал.
E_>
E_>Компиляется ОК. Но OnNameChange ни разу не вызвался.
BEGIN_MSG_MAP(CMainDlg)
COMMAND_HANDLER(IDC_NAMEEDIT, EN_CHANGE, OnEnChangeNameedit)
END_MSG_MAP()
LRESULT OnEnChangeNameedit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/);
LRESULT CMainDlg::OnEnChangeNameedit(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/)
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CAxDialogImpl<CMainDlg>::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
// TODO: Add your control notification handler code here
ATLTRACE("OnEnChangeNameedit()\n");
return 0;
}
не понятно откуда проблема рабочий код создается парой кликов мышкой в Visual Studio
... << RSDN@Home 1.1.4 beta 7 rev. 458>>
Re[4]: Сообщения дочерних контролов
От:
Аноним
Дата:
03.06.05 15:17
Оценка:
OE>не понятно откуда проблема рабочий код создается парой кликов мышкой в Visual Studio
Здравствуйте, <Аноним>, Вы писали:
OE>>не понятно откуда проблема рабочий код создается парой кликов мышкой в Visual Studio
А>У вас VS какая? Я на .NET 2003 работаю.
Версия ос в данном случае роли не играет. Ребята из M$ следять за совместимостью. Глянь лучше что за стили стоят у эдитаю
Здравствуйте, <Аноним>, Вы писали:
OE>>не понятно откуда проблема рабочий код создается парой кликов мышкой в Visual Studio
А>У вас VS какая? Я на .NET 2003 работаю.
аналогично. Бросаем на диалог edit, вызываем контекстное меню, из него Properties, правим ID, потом на кнопку с молнией (Control Events), из комбобокса напротив EN_CHANGE выбираем вставку функции обработчика. Компилируем, всё работает.
Спасибо большое всем за участие. Разобрался.
Воспользовался тулзой WTLHelper с codeproject.com.
Ещё раз большое всем спасибо
Re[3]: Сообщения дочерних контролов
От:
Аноним
Дата:
06.06.05 05:08
Оценка:
Здравствуйте, Erik_, Вы писали:
E_>Здравствуйте, glyph, Вы писали:
G>> Обработчик WM_NOTIFY или WM_COMMAND. За ними скрывается семейство сообщений, так что надо проконсультироваться с MSDN. Обработка будет вестись в классе диалога.
E_>Привожу кусок карты сообщений диалога, в котором реализована сия идея. Не работает . Я потому и спрашивать стал.
E_>
E_>Компиляется ОК. Но OnNameChange ни разу не вызвался.
Вместо NOTIFY_HANDLER_EX(IDC_NAMEEDIT, EN_CHANGE, OnNameChange) напишите:
COMMAND_HANDLER(IDC_NAMEEDIT, EN_CHANGE, OnNameChange)