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);