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

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top