CTreeCtrl und Kontextmenü
-
NM_RCLICK
Wenn du die Ereignisse deines Steuerelemntes ansiehst findest du auch das richtige
[ Dieser Beitrag wurde am 12.11.2002 um 10:23 Uhr von Unix-Tom editiert. ]
-
Ja, das klappt jetzt besser, aber ich hab noch ein Problem.
Die Funktion pmyTreeCtrl->HitTest(myPoint, &uFlags); braucht ein CPoint, wie
besorge ich mir dieses CPoint, vom Item.
-
GetCursorPos & ScreenToClient...
-
hier bin ich wieder
also ich versuche es schon seit ein paar Stunden, das Problem ist: Es werden mehrere Items markiert, Kontextmenü wird irgendwo erzeugt aber nicht da wo ich es haben will.Hier ist mein Code:
void CloeschenversuchView::OnNMRclickTree(NMHDR *pNMHDR, LRESULT *pResult)
{
CTreeCtrl* pTree = (CTreeCtrl*) GetDlgItem(IDC_TREE);
DWORD pos = GetMessagePos();
CPoint pt(LOWORD(pos), HIWORD(pos));
ScreenToClient(&pt);UINT i, uCount = pTree->GetVisibleCount();
HTREEITEM hItem = pTree->GetFirstVisibleItem();for (i=0;i < uCount;i++)
{
CRect r;
pTree->GetItemRect(hItem,&r,FALSE);
if (r.PtInRect(pt) && hItem != NULL)
{
//ASSERT(hItem != NULL);
UINT flag = LVIS_SELECTED | LVIS_FOCUSED;
pTree->SetItemState(pTree->HitTest(pt), flag, flag);CMenu* menu_bar = AfxGetMainWnd()->GetMenu();
CMenu* file_menu = menu_bar->GetSubMenu(4);
ASSERT(file_menu);
file_menu->TrackPopupMenu(TPM_LEFTALIGN
|TPM_RIGHTBUTTON, pt.x,
pt.y, GetDlgItem(IDC_TREE));
}
hItem = pTree->GetNextVisibleItem(hItem);
if(hItem == NULL)
break;
}*pResult = 0;
}was mache ich Falsch, Hiiiiiiiiiilfe
-
Hast du es schonmal mit GetCursorPos probiert?
-
Ja habe ich es klappt auch nicht.
-
Aso: Das ScreenToClient nat. vom TreeCtrl!
[ Dieser Beitrag wurde am 12.11.2002 um 15:35 Uhr von Nemesyzz editiert. ]
-
es funzt nicht auch mit pTree->ScreenToClient(&pt) nicht.
-
Uuuupppsss. Sorry. Hab da was verwechselt... *gg*
Lass das ScreenToClient einfach mal weg...Für HitTest brauchst du es aber!
[ Dieser Beitrag wurde am 12.11.2002 um 15:42 Uhr von Nemesyzz editiert. ]
-
Das Blöde dabei ist daß GetVisibleCount(); mir immer ein Konstante Wert von 15 zurückgibt.
-
ich habe es auskommentiert aber jetzt geht er nicht mehr im If zweig rein.
-
Die Funktion gibt dir zurück wieviel Items sichtbar sind. In einem TreeCtrl kann man nur ein Item markieren.
-
CMenu::TrackPopupMenu: Bildschirmkoordianten (GetCursorPos)
CTreeCtrl::HitTest: Clientkoordianten (Bildschirmkoordianten mit ScreenToClient umrechnen)
-
Es werden aber immer mehr Items makiert je mehr ich Klicke