![]() |
|
![]() ![]() ![]() |
|
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
Хочу программно послать сообщение CBN_SELCHANGE CComboBox-у
MSDN говорит делать так:
но эффекта не наблюдаю ![]() |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
CBN_SELCHANGE -- уведомление, которое шлёт элемент управления родительскому окну, а не наоборот. Иначе говоря -- уведомление есть событие, а ты отсылаешь событие элементу, который генерирует это событие.
Это сообщение отредактировал(а) BorisVorontsov - 18.10.2008, 21:25 -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
![]() Проблема моя вот в чем - есть функция, которая ловит сообщение CBN_SELCHANGE и делает определенные действия. Если трогать контрол руками все ок, но вот беда - метод SetCurSel данное сообщение не посылает. В принципе я вызываю эту функцию явно, работает, но я не уверен, что это корректно. К тому же для данной функции без параметров это работает, а как быть если функция нотификатор принимает параметры. |
|||
|
||||
BorisVorontsov |
|
|||
![]() Thinker ![]() ![]() Профиль Группа: Комодератор Сообщений: 714 Регистрация: 3.11.2005 Где: Молдавия, г. Киши нёв Репутация: нет Всего: 10 |
Функцию -- обработчик события? Если да, то вполне корректно. -------------------- [code=cpp] const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out); for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl; [/code] |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Параметры уведомления четко прописаны (они есть всегда), но ничего интересного для тебя там нет. Все обработчики уведомлений типа WM_COMMAND в MFC не имеют параметров. -------------------- ... |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
Угу, с WM_COMMAND проясняется. А позвольте еще для развития кругозора поинтересоваться, например, задача программно выделить N-ый элемент CListCtrl'а путем посылки соотвествующего сообщения LVN_ITEMACTIVATE, соответствующая функция обработчик явно принимает параметры fn(NMHDR *pNMHDR, LRESULT *pResult), например есть у меня уже реализация обработчика и неохота писать дополнительную функциональность? |
|||
|
||||
Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
LVN_ITEMACTIVATE это не сообщение, а уведомление. Не ты его посылаешь, чтобы выделить итем, а наоборот, контрол таким оброзом сообщает, что ему выделили итем. Это раз.
Второе: есть два вида контролов: "старые" и "новые". Старые посылают уведомления родителю в виде WM_COMMAND и фактически без параметров (т.е. параметры есть, но они ничего не добавляют к коду уведомления). Новые посылают уведомление в виде WM_NOTIFY с параметром NMHDR или его производными, зависящими от вида контрола и уведомления. Эти два вида уведомлений никогда не смешиваются. Т.е. контрол посылает либо WM_COMMAND, либо WM_NOTIFY. WM_NOTIFY посылают контролы, называемые common controls: list view, tree view, etc. За некоторыми исключениями. Например, RichEdit, хотя вроде бы является common control (по крайней мере, появился одновременно и живет вместе), но посылает WM_COMMAND -видимо, для совместимости с "просто эдит". В общем, в MSDN для каждого контрола написано, как он уведомляет парента о своих изменениях. -------------------- ... |
|||
|
||||
triclosan |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 515 Регистрация: 18.8.2006 Репутация: 1 Всего: 12 |
спасибо за ликбез
|
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |