Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно послать сообщение контролу 
:(
    Опции темы
triclosan
Дата 18.10.2008, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



Хочу программно послать сообщение CBN_SELCHANGE CComboBox-у

MSDN говорит делать так:
Код

SendDlgItemMessage(IDC_COMBO1,CBN_SELCHANGE);

но эффекта не наблюдаю  smile 
PM MAIL   Вверх
BorisVorontsov
Дата 18.10.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: нет
Всего: 10



CBN_SELCHANGE -- уведомление, которое шлёт элемент управления родительскому окну, а не наоборот. Иначе говоря -- уведомление есть событие, а ты отсылаешь событие элементу, который генерирует это событие.

Цитата(MSDN)

The CBN_SELCHANGE notification message is sent when the user changes the current selection in the list box of a combo box. 


Это сообщение отредактировал(а) 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]
PM MAIL ICQ GTalk   Вверх
triclosan
Дата 18.10.2008, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



 smile спасибо.

Проблема моя вот в чем - есть функция, которая ловит сообщение CBN_SELCHANGE и делает определенные действия. Если трогать контрол руками все ок, но вот беда - метод SetCurSel данное сообщение не посылает. В принципе я вызываю эту функцию явно, работает, но я не уверен, что это корректно. К тому же для данной функции без параметров это работает, а как быть если функция нотификатор принимает параметры.
PM MAIL   Вверх
BorisVorontsov
Дата 19.10.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Thinker
**


Профиль
Группа: Комодератор
Сообщений: 714
Регистрация: 3.11.2005
Где: Молдавия, г. Киши нёв

Репутация: нет
Всего: 10



Цитата(triclosan @  18.10.2008,  22:23 Найти цитируемый пост)
В принципе я вызываю эту функцию явно, работает, но я не уверен, что это корректно.


Функцию -- обработчик события? Если да, то вполне корректно.


--------------------
[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]
PM MAIL ICQ GTalk   Вверх
Earnest
Дата 20.10.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(triclosan @  18.10.2008,  23:23 Найти цитируемый пост)
а как быть если функция нотификатор принимает параметры. 

Параметры уведомления четко прописаны (они есть всегда), но ничего интересного для тебя там нет. Все обработчики уведомлений типа WM_COMMAND в MFC не имеют параметров.


--------------------
...
PM   Вверх
triclosan
Дата 21.10.2008, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



Цитата(Earnest @  20.10.2008,  14:03 Найти цитируемый пост)
Все обработчики уведомлений типа WM_COMMAND в MFC не имеют параметров. 

Угу, с WM_COMMAND проясняется.

А позвольте еще для развития кругозора поинтересоваться, например, задача программно выделить N-ый элемент CListCtrl'а путем посылки соотвествующего сообщения LVN_ITEMACTIVATE, соответствующая функция обработчик явно принимает параметры  fn(NMHDR *pNMHDR, LRESULT *pResult), например есть у меня уже реализация обработчика и неохота писать дополнительную функциональность? 



PM MAIL   Вверх
Earnest
Дата 21.10.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 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 для каждого контрола написано, как он уведомляет парента о своих изменениях. 


--------------------
...
PM   Вверх
triclosan
Дата 22.10.2008, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 18.8.2006

Репутация: 1
Всего: 12



спасибо за ликбез
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0808 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.