首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

MFC CTreeCtrl 取消預設選中項目的方法

     編輯:程式設計疑難解答

問題

MFC 樹形控制項 CTreeCtrl 初始化時,第一個插入的節點會自動被選中(高亮)。嘗試在 OnInitialUpdate 中呼叫 SelectItem(NULL) 無效。

解決方案

使用 SetItemState 將節點的 TVIS_SELECTED 狀態清除:

// 假設 hRoot 是根節點 handle
m_treeCtrl.SetItemState(hRoot, 0, TVIS_SELECTED);

完整範例

void CMyTreeView::OnInitialUpdate() {
    CTreeView::OnInitialUpdate();
    CTreeCtrl& tree = GetTreeCtrl();
    
    // 插入節點...
    HTREEITEM hRoot = tree.InsertItem(_T("Root"), TVI_ROOT);
    HTREEITEM hChild = tree.InsertItem(_T("Child"), hRoot);
    
    // 關鍵:清除預設選中狀態
    tree.SetItemState(hRoot, 0, TVIS_SELECTED);
    // 或清除所有節點選中
    // tree.SetItemState(NULL, 0, TVIS_SELECTED); // 視版本支援
}

原理解析

  • SelectItem(NULL) 僅設定焦點項目,不改變選中狀態標記。
  • TVIS_SELECTED 是節點狀態位元,需透過 SetItemState 直接操作。
  • 若需「無任何選中」視覺效果,亦可在 OnDrawItem 自繪時忽略 TVIS_SELECTED。

補充技巧

若想讓特定節點預設展開但不選中:

tree.Expand(hRoot, TVE_EXPAND);
tree.SetItemState(hRoot, 0, TVIS_SELECTED);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved