Я пытаюсь использовать контекстное меню, которое я создал для диалогового окна, но сообщение WM_COMMAND, которое должно быть отправлено, когда я щелкаю по пункту меню, не достигает процедуры диалога.
Я поместил оператор if в цикл обработки сообщений, чтобы проверить WM_COMMAND
, и он регистрируется, но не отправляется в мою процедуру диалога.
Да, я использую if( !IsDialogMessage( hwndListDialog, &msg ) )
для вызова TranslateMessage
и DispatchMessage
.
Вот как я инициализировал свое контекстное меню:
listitemmenu = CreatePopupMenu();
listmenuitem1.cbSize = sizeof( menuitem1 );
listmenuitem1.fMask = MIIM_TYPE;
listmenuitem1.fType = MFT_STRING;
listmenuitem1.hSubMenu = NULL;
listmenuitem1.dwTypeData = "Copy Imgur Link";
InsertMenuItem( listitemmenu, 0, true, &listmenuitem1 ); //insert menu item
listmenuitem2.cbSize = sizeof( menuitem1 );
listmenuitem2.fMask = MIIM_TYPE;
listmenuitem2.fType = MFT_STRING;
listmenuitem2.hSubMenu = NULL;
listmenuitem2.dwTypeData = "Copy Imgur Delete Link";
InsertMenuItem( listitemmenu, 1, true, &listmenuitem2 ); //insert menu item
listmenuitem3.cbSize = sizeof( menuitem1 );
listmenuitem3.fMask = MIIM_TYPE;
listmenuitem3.fType = MFT_STRING;
listmenuitem3.hSubMenu = NULL;
listmenuitem3.dwTypeData = "Rename";
InsertMenuItem( listitemmenu, 2, true, &listmenuitem3 ); //insert menu item
listmenuitem4.cbSize = sizeof( menuitem1 );
listmenuitem4.fMask = MIIM_TYPE;
listmenuitem4.fType = MFT_STRING;
listmenuitem4.hSubMenu = NULL;
listmenuitem4.dwTypeData = "Remove from list";
InsertMenuItem( listitemmenu, 3, true, &listmenuitem4 ); //insert menu item
Вот как я отслеживаю меню:
TrackPopupMenuEx( listitemmenu, TPM_LEFTBUTTON | TPM_NOANIMATION | TPM_HORIZONTAL | TPM_VERTICAL, cpos.x, cpos.y, ListControl, NULL );
Это случай переключения, который я пытаюсь использовать для взаимодействия с моим меню:
case WM_COMMAND:
switch( LOWORD(lParam) )
{
case 0:
printf("copy link");
break;
case 1:
printf("copy deletion link");
break;
case 2:
printf("Rename");
break;
case 3:
printf("Remove");
break;
}
break;