PopUP-Menü wird nur komisch angezeigt
-
hallo,
ich habe unter den ressourcen ein popup-menü erstellt und wollte
es so aufrufen:POINT pt; GetCursorPos(&pt); CMenu test; test.LoadMenu(IDR_MENU1); test.TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, this, NULL);allerdings sieht das menü dann immer voll komisch aus und zwar so:
http://img48.imageshack.us/img48/1274/men5zh.jpgwürde mich über antworten freuen... danke!
-
Versuchs mal so:
void CGDTDlg::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu *m_lMenu; CPoint m_pPoint; m_pPoint = point; // Zeiger auf Fenstermenü holen m_lMenu = GetMenu(); // Zeiger auf erstes Untermenü holen m_lMenu = m_lMenu->GetSubMenu(0); // Popup-Menü anzeigen m_lMenu->TrackPopupMenu(TPM_LEFTALIGN + TPM_LEFTBUTTON, m_pPoint.x, m_pPoint.y, this, NULL); }Du solltest natürlich das Menu richtig erstellt haben, und über die Nachricht wm_contextmenu aufrufen.
-
Also über die WM_CONTEXTMENU Nachricht muss es ja nicht laufen, man kann es auch über die Nachricht WM_RBUTTONDOWN oder sowas laufen lassen, aber die Sache ist die, dass man nie ein ganzes Menu anzeigen lassen kann, sondern immer nur ein Submenu.
Grüssli
-
-
Und was ist jetzt, wenn man nicht möchte, dass die Taste auf dem Keyboard das Menü aufruft? Oder wenn das Menü nur über die Leertaste aufgerufen werden soll? Usw. usf.? Kenne das Tutorial schon und auch die Nachricht, nur ist sie nicht immer verbindlich und hilft bei der Lösung dieses Problem in diesem Thread absolut nichts!
Grüssli

-
hmm so richtig verstehe ich das noch net!
also ich lade mein menu IDR_MENU1 und dann?! also ich habs jetzt so versucht
wie es hier unten geposted ist, es ist aber genau wie vorher!!void CBTRO_test1Dlg::OnContextMenu(CWnd* pWnd, CPoint point) { POINT pt; GetCursorPos(&pt); CMenu test; test.LoadMenu(IDR_MENU1); CMenu *m_lMenu; m_lMenu=&test; m_lMenu->GetSubMenu(0); m_lMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, this, NULL); }
-
Kann es nicht sein, dass dein Kontextmenü nur deshalb so "komisch" dargestellt wird, weil es noch gar keinen Eintrag enthält? Sieht für mich ganz danach aus...
-
hmm also das müsste ich mmn. richtig erstellt haben?!
-
Mach mal den Haken "Als Kontextmenu anzeigen" raus.
Danach hast du einen grauen langen Balken, in dem stehen müsste "test hallo1 hallo2"
Mach zwei untereinträge in test --> das kannst du dann als kontexmenu aufrufen.
-
ne leider klappt das auch nicht :-|
der code zum aufrufen ist immernoch:
void CBTRO_test1Dlg::OnContextMenu(CWnd* pWnd, CPoint point) { POINT pt; GetCursorPos(&pt); CMenu test; test.LoadMenu(IDR_MENU1); CMenu *m_lMenu; m_lMenu=&test; m_lMenu->GetSubMenu(0); m_lMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON, pt.x, pt.y, this, NULL); }und mein menü sieht nun so aus:
http://img115.imageshack.us/img115/8199/lol5en.jpgaber klappt halt immernoch nicht :-| woran kann das denn liegen?! ich rufe es doch richtig auf oder??
-
Du solltest dir den oben genannten Vorschlag von a.s.t_2003 mal genau aunschauen. Da gibt es nämlich einen kleinen aber wichtigen Unterschied zu deinem Code. Diese Zeile von dir ist nämlich absolut wirkungslos, da du den Return-Wert verpuffen lässt...
m_lMenu->GetSubMenu(0);Der Code von a.s.t_2003 macht etwas völlig anderes:
// Zeiger auf erstes Untermenü holen m_lMenu = m_lMenu->GetSubMenu(0);Änder deine Zeile mal so um, dann sollte das funktioniern...

-
Hallo habe auch dein Problem gahebt und konnte es auch nicht hinbekommen.
Geh mal in den Ressourcenmanager aufs menu
unter eigenschaften "view as popup"
damit hat es bei mir geklappt