Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Непонятки с BN_CLICKED ?

860
18 марта 2004 года
Abell2000
138 / / 15.01.2003
Hi all!
У меня такой вопрос, в главном окне программы создается несколько контролов (buttons, checkboxes), нужно отловить кликанье по ним. Пытаюсь вылавить это в оконной процедуре через notification message BN_CLICKED для WM_COMMAND. Проблема в том, что при кликах wParam постоянно 0, хотя lParam указывает на нужный контрол. Каким же образом мне отловить BN_CLICKED?
319
18 марта 2004 года
xelos
577 / / 27.02.2003
Цитата:
Originally posted by Abell2000
Hi all!
У меня такой вопрос, в главном окне программы создается несколько контролов (buttons, checkboxes), нужно отловить кликанье по ним. Пытаюсь вылавить это в оконной процедуре через notification message BN_CLICKED для WM_COMMAND. Проблема в том, что при кликах wParam постоянно 0, хотя lParam указывает на нужный контрол. Каким же образом мне отловить BN_CLICKED?


так для каждого контрола свой обработчик BN_CLICKED в классе окна создается... Каждому контролу по обработчику... В каждом конкретном обработчике и делай все что надо при кликанье на контрол.

860
18 марта 2004 года
Abell2000
138 / / 15.01.2003
Цитата:
Originally posted by xelos

так для каждого контрола свой обработчик BN_CLICKED в классе окна создается... Каждому контролу по обработчику... В каждом конкретном обработчике и делай все что надо при кликанье на контрол.


Да нет, у меня читый API без MFC, т.е. все сообщения проходят через оконную процедуру, где их и отлавливаем, или я чего-то недопонял?

3.2K
18 марта 2004 года
srd
50 / / 31.08.2003
Я клики обычно так ловлю:
Код:
...
case WM_COMMAND:
    switch (LOWORD(wparam)) {
        case IDOK:
            if (HIWORD(wparam) == BN_CLICKED) {
            }
            break;

        case IDCANCEL:
             if(HIWORD(wparam) == BN_CLICKED) {
             }
             break;
    }
    break;
...

Если ты правильно пишешь оконную функцию, то у тебя wParam не может быть равным нулю хотя бы потому, что в старшем слове хранится код уведомления BN_CLICKED. Покажи свой код, так трудно что-то сказать.
860
19 марта 2004 года
Abell2000
138 / / 15.01.2003
Цитата:
Originally posted by srd
...Покажи свой код, так трудно что-то сказать.


Вот оконная проц. главного окна:
LRESULT CALLBACK WndProc(HWND wHandle,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg){
...
case WM_COMMAND:
if(HIWORD(wParam)==0){
OnTrayMenuSelect(wHandle,wParam,lParam);
}else
if(HIWORD(wParam)==BN_CLICKED){
OnClick(wHandle,wParam,lParam);
}
break;
В принципе я уже обнаружил в чем проблема, но мне не понятно как ее решить. Дело в том, что в winuser.h BN_CLICKED определена как 0, а мне еще нужно обрабатывать клики в меню, что тоже делается через WM_COMMAND с notification code=0. Либо я чего-то не дополнял, либо что?

527
20 марта 2004 года
pavor
275 / / 28.09.2003
Цитата:
Originally posted by Abell2000

Вот оконная проц. главного окна:
LRESULT CALLBACK WndProc(HWND wHandle,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch(msg){
...
case WM_COMMAND:
if(HIWORD(wParam)==0){
OnTrayMenuSelect(wHandle,wParam,lParam);
}else
if(HIWORD(wParam)==BN_CLICKED){
OnClick(wHandle,wParam,lParam);
}
break;
В принципе я уже обнаружил в чем проблема, но мне не понятно как ее решить. Дело в том, что в winuser.h BN_CLICKED определена как 0, а мне еще нужно обрабатывать клики в меню, что тоже делается через WM_COMMAND с notification code=0. Либо я чего-то не дополнял, либо что?


Надо сделать еще одно условие по идентификатору сендера

3.2K
20 марта 2004 года
srd
50 / / 31.08.2003
Цитата:
Originally posted by pavor

Надо сделать еще одно условие по идентификатору сендера



И чтоб идентификаторы элементов меню и не совпадали и идентификаторами кнопок.

860
20 марта 2004 года
Abell2000
138 / / 15.01.2003
Цитата:
Originally posted by srd
И чтоб идентификаторы элементов меню и не совпадали и идентификаторами кнопок.


Мда, если это единственный способ, то не совсем понятно чем они там думали создавая api, что у них одна константа отвечает за разные события:(

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог