Absolute / relative Positionen
-
hallo,
ich möchte ein programm schreiben, dass beim klick auf die rechte maustaste ein kontextmenü öffnet.void CMessengerDlg::OnRButtonUp(UINT nFlags, CPoint point) { MainMenu.LoadMenu(IDR_MENU1); pSubMenu=MainMenu.GetSubMenu(0); pSubMenu->EnableMenuItem(0, MF_ENABLED); CRect rect; GetClientRect(rect); int x = GetSystemMetrics(SM_CXSCREEN)/2; int y = GetSystemMetrics(SM_CYSCREEN)/2; pSubMenu->TrackPopupMenu( TPM_CENTERALIGN |TPM_TOPALIGN | TPM_LEFTBUTTON, point.x+(x-(rect.Width()/2)),point.y+(y-(rect.Height()/2)), this, NULL ); CDialog::OnRButtonUp(nFlags, point); }das funktioniert nur, wenn das fenster zentral positioniert ist. TrackPopupMenu() geht nämlich von absoluten werten für die position aus. ich weiss auch leider nicht, wie ich die absolute fensterposition ermittle oder die relative position bei der funktion angeben kann.
kann mir da jemand helfen ?danke, TSX
-
ScreenToClient und ClientToScreen dürften dir helfen
-
Verstehe ich nicht ganz. Du bekommst doch die Koordinaten direkt geliefert in point.
Zumdem sollten Kontextmenus über WM_CONTEXTMENU Handler realisiert werden damit die entsprechende Windows Taste auch berücksichtigt wird und nicht nur der rechte Mausklick!
-
Martin Richter schrieb:
Verstehe ich nicht ganz. Du bekommst doch die Koordinaten direkt geliefert in point.
Wenn du den normalen rechten Mausklick abfängst, ist der gelieferte Klickpunkt relativ zu deinem Fensterstartpunkt (0|0) zu sehen. Das sind also Fensterkoordinaten.
Für das Kontextmenü braucht man aber die Desktopkoordinaten. Das meint er mit relativ/absolut
-
Pellaeon schrieb:
Wenn du den normalen rechten Mausklick abfängst, ist der gelieferte Klickpunkt relativ zu deinem Fensterstartpunkt (0|0) zu sehen. Das sind also Fensterkoordinaten.
Für das Kontextmenü braucht man aber die Desktopkoordinaten. Das meint er mit relativ/absolutStimmt! Das Problem hat man natürlich nicht wenn man WM_CONTEXTMENU verwendet!
-
dankeschön :). ich werde da gleich mal ausprobieren. gestern kam ich leider noch nicht dazu, weil ich mein pc neugemacht hab.
-
mit WM_CONTEXTMENU funktioniert das wie gewünscht. vielen dank
