CMenu wieder verschwinden lassen
-
hi
ich hab mein projekt nur übernommen, das heißt angefangen hat damit ein anderer. der hat auch das menu zum item in der systray gemacht. es funzu auch bis auf das, dass es nicht mehr verschwindet, wenn ich mit der maus woandershin klicke. es geht nur dann wieder weg, wenn ich einen menüeintrag anklicke.
das menu poppt auf mit
m_mnuTrayMenu.GetSubMenu(0)->TrackPopupMenu(TPM_BOTTOMALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,pt.x,pt.y,this); m_mnuTrayMenu.GetSubMenu(0)->SetDefaultItem(m_nDefaultMenuItem,TRUE);Jetzt die frage: wie mach ich es, dass es auch wieder verschwindet, wenn ich irgendwo anders hin klicke?
-
Aus der MSDN:
To display a context menu for a notification icon, the current window must be the foreground window before the application calls TrackPopupMenu or TrackPopupMenuEx. Otherwise, the menu will not disappear when the user clicks outside of the menu or the window that created the menu (if it is visible). However, when the current window is the foreground window, the second time this menu is displayed, it displays and then immediately disappears. To correct this, you must force a task switch to the application that called TrackPopupMenu at some time in the near future. This is done by posting a benign message to the window or thread, as shown in the following code sample:
SetForegroundWindow(hDlg); // Display the menu TrackPopupMenu(hSubMenu,TPM_RIGHTBUTTON,pt.x,pt.y,0,hDlg,NULL); PostMessage(hDlg, WM_NULL, 0, 0);
-
super
dankeschön
greetz
