none
CTreeCtrl soll Expansion behalten RRS feed

  • Frage

  • Hallo,

    ich habe ein CTreeCtrl, das komplett erweitert ist bei seiner Erzeugung (die Wurzel ist aufgeklappt und alle Zweige sind aufgeklappt). Die Eigenschaft "Has Buttons" ist deaktiviert.

    Wenn ich auf einen Zweig (doppel-)klicke, dann wird der Zweig aufgeklappt oder geschlossen. Und wenn ich einen Zweig öffne, dann schließen sich einige andere Zweige.

    Ich möchte, dass der Baum immer voll aufgeklappt angezeigt wird. Das CTreeCtrl soll keinen Zweig schliessen.

    Wie erreiche ich das?

    Danke für Hilfe,
    Guido

    Dienstag, 9. Juli 2019 07:34

Antworten

  • Ok,

    ich hab es herausgefunden. Ich muss TVN_EXPANDING abfangen und TRUE zurückgeben. Nur beim Erzeugen des Baums muss dort 0 zurückgegeben werden. Hier mein Beispiel, falls jemand mal das gleiche Problem hat:

    class CMyDlg : public CDialogEx
    {
    public:
      //...
      CTreeCtrl m_tree;
      void CreateTree();
      bool m_bTreeCreation;
      afx_msg void OnTvnItemexpandingTree1(NMHDR *pNMHDR, LRESULT *pResult);
      afx_msg void OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult);
    }
    
    void CMyDlg::DoDataExchange(CDataExchange* pDX)
    {
      DDX_Control(pDX, IDC_TREE1, m_tree);
    }
    
    BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx)
      ON_NOTIFY(TVN_ITEMEXPANDING, IDC_TREE1, OnTvnItemexpandingTree1)
      ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, OnTvnSelchangedTree1)
    END_MESSAGE_MAP()
    
    void CMyDlg::CreateTree()
    {
      m_bTreeCreation = true;
      HTREEITEM item,itemz,itemw;
      m_tree.DeleteAllItems();
      itemw = m_tree.InsertItem(_T("Wurzel"), TVI_ROOT);
      m_tree.SetItemData(itemw, 0);
    
      itemz = m_tree.InsertItem(_T("Zweig 1"), itemw); m_tree.SetItemData(itemz, 100);
      item = m_tree.InsertItem(_T("data 1"), itemz); m_tree.SetItemData(item, 101);
      item = m_tree.InsertItem(_T("data 2"), itemz); m_tree.SetItemData(item, 102);
      item = m_tree.InsertItem(_T("data 3"), itemz); m_tree.SetItemData(item, 103);
      item = m_tree.InsertItem(_T("data 4"), itemz); m_tree.SetItemData(item, 104);
      item = m_tree.InsertItem(_T("data 5"), itemz); m_tree.SetItemData(item, 105);
      m_tree.Expand(itemz, TVE_EXPAND);
    
      itemz = m_tree.InsertItem(_T("Zweig 2"), itemw); m_tree.SetItemData(itemz, 200);
      item = m_tree.InsertItem(_T("data 11"), itemz); m_tree.SetItemData(item, 201);
      item = m_tree.InsertItem(_T("data 12"), itemz); m_tree.SetItemData(item, 202);
      item = m_tree.InsertItem(_T("data 13"), itemz); m_tree.SetItemData(item, 203);
      m_tree.Expand(itemz, TVE_EXPAND);
    
      m_tree.Expand(itemw, TVE_EXPAND);
      m_bTreeCreation = false;
    }
    
    void CMyDlg::OnTvnItemexpandingTree1(NMHDR *pNMHDR, LRESULT *pResult)
    {
      LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
      *pResult = (m_bTreeCreation ? 0 : TRUE);
    }
    
    void CMyDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
    {
      LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
      HTREEITEM item = m_tree.GetSelectedItem();
      int id = (int)m_tree.GetItemData(item);
      CString sz; sz.Format(_T("%i"), id);
      AfxMessageBox(sz);
      *pResult = 0;
    }
    
    
    Gruß, Guido

    • Als Antwort markiert Guido Franzke Mittwoch, 10. Juli 2019 06:45
    Mittwoch, 10. Juli 2019 06:45