Problem mit TVN_SELCHANGED auf CTreeCtrl Objekt
-
01-07-2019 - |
Frage
Ich habe Treecontrol Objekt erstellt CTreeCtrl MFC-Klasse. Die Treecontrol muss Umbenennungs unterstützen. Wenn ich auf einem Punkt links im Baum des TVN_SELCHANGED Ereignis, von dem aufgerufen wird, kann ich als unter das ausgewählten Element des Baumes erhalten: HTREEITEM h = m_moveListTree.GetSelectedItem (); CString s = m_moveListTree.GetItemText (h);
Allerdings, wenn ich auf ein beliebiges Element im Baum der rechten Maustaste erhalte ich keine TVN_SELCHANGED Ereignis und daher bleibt das ausgewählte Element noch das gleiche von links Click-Ereignis. Dies verursacht folgendes Problem: 1) Benutzer leftclicks zum Produkt A 2) Benutzer rechts klickt auf Punkt B und sagt umbenennen 3) Da das ausgewählte Element A ist immer noch die Umbenennungs bewirbt sich für Punkt A.
Bitte helfen Sie bei der Lösung von Problem.
-Praveen
Lösung
Ich habe meine eigene MFC wie home grown C ++ GUI-Bibliothek auf dem Win32-API und Blick auf meinem Code, das ist, wie es diese Situation behandelt:
LRESULT xTreeCtrl::onRightClick(NMHDR *)
{
xPoint pt;
//-- get the cursor at the time the mesage was posted
DWORD dwPos = ::GetMessagePos();
pt.x = GET_X_LPARAM(dwPos);
pt.y = GET_Y_LPARAM (dwPos);
//-- now convert to window co-ordinates
pt.toWindow(this);
//-- check for a hit
HTREEITEM hItem = this->hitTest(pt);
//-- select any item that was hit
if ((int)hItem != -1) this->select(hItem);
//-- leave the rest to default processing
return 0;
}
Ich vermute, dass, wenn Sie etwas ähnliches in der MFC der rechten Maustaste oder rechte Taste gedrückt Ereignisse tun, die das Problem beheben werden.
. HINWEIS: Der onRightClick Code oben ist nichts anderes als die Handler für die WM_NOTIFY , NM_RCLICK Nachricht
Andere Tipps
Dieses Verhalten ist von Entwurf - Rechtsklick die Auswahl nicht bewegt
.Für das, was Sie wollen, schalten Sie den TVS_EDITLABELS Stil auf der Baumansicht. Dann sind Sie die TVN_BEGINLABELEDIT und TVN_ENDLABELEDIT Meldungen behandeln.
Nicht sicher, wie Sie über das Kontextmenü Popup, aber Sie können HitTest () verwenden, die von einem Punkt zu einem Baum Element zu erhalten. So können Sie diese in der rechten Click-Handler verwenden.
Vergessen Sie nicht, dass Sie das Kontextmenü auch durch einen Schlüssel zu angemessenen modernen Tastaturen aktiviert werden kann. Dann möchten Sie wahrscheinlich das ausgewählte Element als Ziel verwenden.