Как заставить "замолчать" второй COMBOBOX?

Тема в разделе "WASM.WIN32", создана пользователем Valentin, 25 фев 2008.

  1. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    У меня на форме 2 COMBOBOX: Cbo1 и Cbo2.
    При выборе строки в Cbo1 я перехватываю сообщение CBN_SELCHANGE и выполняю ряд функций. Одна из них заполняет строки в Cbo2.
    Когда я выбираю строку в Cbo2 посылается главному окну такое же сообщение CBN_SELCHANGE. Это сообщение влияет на работу Cbo1.
    Как предовратить посылку сообщения из Cbo2??

    Заранее всем благодарен за помощь, с уважением, Valentin
     
  2. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Фильтровать нужно на хендл/ид
    Когда приходит WM_COMMAND младшее слово wParam содержит ид контрола, lParam - его хендл
    Например:
    if (LOWORD (wParam)==ID_CBO1)
    {
    ...
    }

    или

    if (lParam == hCbo1)
    {
    ...
    }

    А вообще msdn. Либо любой хелп по апи.
     
  3. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    KeSqueer

    Спасибо, АПИ необходимых не нахожу, буду пробовать логику.
     
  4. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    KeSqueer
    Посмотрите, может я что-то не так делаю, но на IDC_CBO2 нет реакции.
    .elseif eax == WM_COMMAND
    mov eax, [wParam]
    shr eax, 16
    .if eax == CBN_SELCHANGE
    Call Material ;вызов ф-ции после выбора строки (здесь работает)
    .elseif eax == IDC_CBO2
    invoke MessageBox, 0, ADDR bufferRasc, ADDR MesTM5, MB_OK (..здесь нет)
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Код (Text):
    1. .elseif eax == WM_COMMAND
    2.   mov  eax,[wParam]
    3.   mov  edx,eax
    4.   shr  eax,16
    5.   and  edx,0xFFFF
    6.   .if edx == IDC_CBO1 && eax == CBN_SELCHANGE
    7.     call Material
     
  6. Valentin

    Valentin Member

    Публикаций:
    0
    Регистрация:
    2 ноя 2007
    Сообщения:
    130
    IceStudent

    CBN_SELCHANGE работает только так:
    .elseif eax == WM_COMMAND
    mov eax, [wParam]
    shr eax, 16
    .if eax == CBN_SELCHANGE
    Call Material ;вызов ф-ции после выбора строки (здесь работает)
    ..................................
    иначе-нет.
    А вот
    .elseif eax == WM_COMMAND
    mov eax,[wParam]
    mov edx,eax
    shr eax,16
    and edx,0xFFFF
    .if edx == IDC_CBO1
    ..................................
    то же не дает никакой реакции.
    .................................................
     
  7. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Кстати, кто знает как лучше:

    Код (Text):
    1. mov eax, [wParam]
    2. mov edx, eax
    3. shr eax, 16
    4. and edx, 0xFFFF
    или

    Код (Text):
    1. movzx edx, word [wParam]
    2. movzx eax, word [wParam+2]
    ?