CTreeCtrl OnRButtonDown geht nicht
-
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ... ON_WM_RBUTTONDOWN() ... END_MESSAGE_MAP()void CMainFrame::OnRButtonDown(UINT nFlags, CPoint point) { UINT uFlags; HTREEITEM hItem = m_mainTree.HitTest(myPoint, &uFlags); if (!hItem) return; BuildMenu(); }es wird nicht erkannt, dass ein Item angeklickt wurden, wieso, was vergesse ich?
-
Ich nehme mal an dass das TreeCtrl ein Child-Fenster deines CMainFrame ist.
Dann solltest du die Notification-Message NM_RCLICK behandeln.BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ... ON_NOTIFY(NM_RCLICK, IDC_TREE1, OnRclickTree1) ... END_MESSAGE_MAP() void CMainFrame::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen *pResult = 0; }Die Botschaft WM_RBUTTONDOWN wird an das CTreeCtrl bei einem Rechtsclick gesendet, nicht an das CMainFrame. Das TreeControl benachrichtigt seinen Parent ( CMainFrame ) über die Notification Message WM_NOTIFY + NM_RCLICK über den Rechtsklick im TreeCtrl. Das kannst du in der MSDN nachlesen.
-
es wird erkannt, dass es die rechte maus down ist, es wird aber nicht erkannt, das es auf einem item ist.
-
Ist jetzt nur eine Vermutung, aber kann es sein, dass die Koordinatensysteme der POINT-Koordinaten nicht übereinstimmen ?
WM_RBUTTONDOWN auf dem FrameWnd liefert die Koordinaten relativ zum linken oberen Eck des CMainFrame
HitTest erwartet die Koordinaten relativ zum CTreeCtrl.
void CMainFrame::OnRButtonDown(UINT nFlags, CPoint point) { MapWindowPoints( &mainTree, (LPPOINT)&point, 1 ); HTREEITEM hItem = m_mainTree.HitTest(point, &uFlags); }
-
jetzt habe ich mist gebaut.
es leuft jetzt nur im dialog, im tree reagiert es garnicht mehr
es ist ein 0815 dialog mit CTreeCtrl und 2 buttons drin.
-
Morides schrieb:
es wird nicht erkannt, dass ein Item angeklickt wurden, wieso, was vergesse ich?
void CMainFrame::OnRButtonDown(UINT nFlags, CPoint point) { [b]Default();[/b] UINT uFlags; HTREEITEM hItem = m_mainTree.HitTest(myPoint, &uFlags); if (!hItem) return; BuildMenu(); }Ohne dass Du den rechten Mausklick an die Elternklasse weitergibst wird es auch kein Item selektieren.
Wenn es Dir aber um ein Context Menü geht:
http://support.microsoft.com/kb/222905/en-us
-
jetzt werden die Items erkannt, aber es wird nicht das erkannt worauf man geklickt hat, sondern ein Item was 2 items tiefer ist.
Wieso?
habe es nach http://support.microsoft.com/kb/222905/en-us erstellt.ahja ich brauch sowas in der art:
ON_NOTIFY(NM_CLICK, OnClick)wo ich keine ID eingeben muss.