ListBox и обработка сообщений от всплывающего меню

Тема в разделе "WASM.WIN32", создана пользователем s0lex, 8 июл 2011.

  1. s0lex

    s0lex New Member

    Публикаций:
    0
    Регистрация:
    22 май 2011
    Сообщения:
    4
    В ресурсах диалогового окна определён элемент ListBox.
    При нажатии по нему правой кнопки мыши должно выводиться всплывающее меню.
    Чтобы отследить нажатие, делаю сабклассинг:

    Код (Text):
    1. WNDPROC OldListBoxProc;
    2.  
    3. BOOL CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    4. {
    5.     case WM_INITDIALOG:
    6.         OldListBoxProc = (WNDPROC) SetWindowLong(GetDlgItem(hDlg, IDC_LIST_MODULES), GWL_WNDPROC, (long)NewListBoxProc);
    7.         return FALSE;
    8. ...
    9. }
    Код (Text):
    1. BOOL CALLBACK NewListBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
    2. {
    3.     HMENU hMenu, hSubMenu;
    4.     POINT pt;
    5.     int   nIndex;
    6.  
    7.     switch ( uMsg )
    8.     {
    9.         case WM_RBUTTONDOWN:
    10.         hMenu    = LoadMenu(hInstance, "TRACKMENU");
    11.         hSubMenu = GetSubMenu(hMenu, 0);
    12.         GetCursorPos(&pt);
    13.         nIndex = TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y,  0, hDlg, 0);
    14.  
    15.         switch ( nIndex )
    16.     {
    17.             case 1:
    18.             MessageBox(0,"1",0,0);
    19.         break;
    20.         case 2:
    21.         MessageBox(0,"2",0,0);
    22.             break;
    23.         default:
    24.         break;
    25.          }
    26.          DestroyMenu(hMenu);
    27.          DestroyMenu(hSubMenu);
    28.      break;
    29.      }
    30.  
    31.      return OldListBoxProc(hDlg, uMsg, wParam, lParam);
    32. }
    Всплывающее меню отображается как положено, а обработка сообщений не работает.
    Как заставить их обрабатываться?
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Код (Text):
    1. case 1:
    2. ...
    3. case 2:
    1 и 2 - это так в ресурсе меню сделано?
    Потому что это не индексы меню, а идентификаторы из ресурса.

    hSubMenu не надо разрушать, только - hMenu.
     
  3. s0lex

    s0lex New Member

    Публикаций:
    0
    Регистрация:
    22 май 2011
    Сообщения:
    4
    Эх, вот же я вчера начудил! Вроде бы трезвый был.

    Спасибо, учту.

    Тему можно закрыть.