В ресурсах диалогового окна определён элемент ListBox. При нажатии по нему правой кнопки мыши должно выводиться всплывающее меню. Чтобы отследить нажатие, делаю сабклассинг: Код (Text): WNDPROC OldListBoxProc; BOOL CALLBACK MainDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_INITDIALOG: OldListBoxProc = (WNDPROC) SetWindowLong(GetDlgItem(hDlg, IDC_LIST_MODULES), GWL_WNDPROC, (long)NewListBoxProc); return FALSE; ... } Код (Text): BOOL CALLBACK NewListBoxProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { HMENU hMenu, hSubMenu; POINT pt; int nIndex; switch ( uMsg ) { case WM_RBUTTONDOWN: hMenu = LoadMenu(hInstance, "TRACKMENU"); hSubMenu = GetSubMenu(hMenu, 0); GetCursorPos(&pt); nIndex = TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_RIGHTBUTTON | TPM_RETURNCMD, pt.x, pt.y, 0, hDlg, 0); switch ( nIndex ) { case 1: MessageBox(0,"1",0,0); break; case 2: MessageBox(0,"2",0,0); break; default: break; } DestroyMenu(hMenu); DestroyMenu(hSubMenu); break; } return OldListBoxProc(hDlg, uMsg, wParam, lParam); } Всплывающее меню отображается как положено, а обработка сообщений не работает. Как заставить их обрабатываться?
Код (Text): case 1: ... case 2: 1 и 2 - это так в ресурсе меню сделано? Потому что это не индексы меню, а идентификаторы из ресурса. hSubMenu не надо разрушать, только - hMenu.