| Код | if( lParam == WM_RBUTTONUP)//Как раз как правильно попапы отображать { SetForegroundWindow(hwndMain); GetCursorPos(&pt); TrackPopupMenu(cMenu, TPM_RIGHTALIGN|TPM_RIGHTBUTTON,pt.x, pt.y, 0, hwndMain, NULL); break; }
|
надобно сделать так
| Код | if( lParam == WM_RBUTTONUP)//Как раз как правильно попапы отображать { GetCursorPos(&pt); SetForegroundWindow(hwndMain); TrackPopupMenu(cMenu, TPM_RIGHTALIGN|TPM_RIGHTBUTTON,pt.x, pt.y, 0, hwndMain, NULL); PostMessage(hwndMain,WM_NULL,0,0); break; }
|
цитата из сборика Iczelion`a :
| Цитата | Внимание: остерегайтесь следующих проблем, часто возникающих при pаботе со всплывающими меню.
Когда меню отображено на экране, щелчок вне меню не приводит к его немедленному исчезновению. Это происходит потому, что окно, которое будет получать уведомления от меню, ДОЛЖНО быть на переднем плане. Просто вызовите SetForegroundWindow, чтобы исправить эту проблему.
После вызова SetForegroundWindow вы обнаружите, что в первый раз всплывающее меню сработает нормально, но при последующем появлении оно будет отображаться, а затем тут же исчезать. Как написано в MSDN, это сделано "намеренно". Необходимо переключить задачу на программу, являющуюся владельцем иконки в system tray. Этого можно добиться, отправив любое сообщение окну вашей программы. Но только используйте PostMessage, а не SendMessage!
|
|