Re: Проблема с PopupMenu
От: Baskak Россия  
Дата: 21.02.11 17:01
Оценка: +1
Не судьба справку по TrackPopupMenu() прочитать? И ремарк к ней.

Там английским по белому написано: "To display a context menu for a notification icon, the current window must be the foreground window before the application calls TrackPopupMenu or TrackPopupMenuEx".

А вот пример из этой самой стправки:

SetForegroundWindow(hDlg); // <-- тут
TrackPopupMenu(hMenu, TPM_RIGHTBUTTON, pt.x, pt.y, 0, hDlg, NULL);
PostMessage(hDlg, WM_NULL, 0, 0);
Проблема с PopupMenu
От: Аноним  
Дата: 21.02.11 15:22
Оценка:
Нужно показать для иконки в трее локальное меню. Пробовал сделать так:
   HMENU hMenu = CreatePopupMenu();
   MENUITEMINFO mi;
   memset( &mi, 0, sizeof(MENUITEMINFO) );
   mi.cbSize = sizeof(MENUITEMINFO);
   mi.fType = MFT_STRING;
   mi.fMask = MIIM_ID|MIIM_TYPE;

   mi.cch = 1;
   mi.wID = 1;
   mi.dwTypeData = "1";
   InsertMenuItem( hMenu, 0, FALSE, &mi );
   mi.wID = 2;
   mi.dwTypeData = "2";
   InsertMenuItem( hMenu, 0, FALSE, &mi );

   POINT pos;
   GetCursorPos( &pos );
   UINT cmd = ::TrackPopupMenuEx( hMenu, TPM_NONOTIFY|TPM_RETURNCMD, pos.x, pos.y, mWindow, NULL );
   DestroyMenu( hMenu );

Меню показывается, при выборе закрывается и возвращает корректный результат.
Но никак нельзя отказаться от выбора, т.е. по Esc и по клику вне меню оно не закрывается, кроме того аналогично перестают закрываться меню других приложений.
Как сделать возможность отказа от выбора?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.