Tree Control : how to disable an item
Tree Control 不支持節(jié)點的禁用, 但是可以通過自繪實現(xiàn), 主要如下:
1. 標記節(jié)點是否禁用. 可以用 SetItemData & GetItemData 來設置&獲取節(jié)點數(shù)據(jù)
2. 在禁用的節(jié)點上, 要過濾一些對節(jié)點操作, 如expanding, selecting, drag & drop 等.
TVN_SELCHANGING 節(jié)點選中改變時
TVN_ITEMEXPANDING 節(jié)點展開時
TVN_BEGINDRAG 節(jié)點開始被拖拉
TVN_BEGINLABELEDIT 節(jié)點被編輯
//Preventing selection: (handle TVN_SELCHANGING)
void CYourDialog::OnSelchangingTree(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*) pNMHDR;
if(((CItemStruct *) m_tree.GetItemData(pNMTreeView->iNewItem))->m_bDisabled)
{
*pResult = 1; // 設置 *pResult=1 表示TVN_SELCHANGING 這個操作不能繼續(xù)
return;
}
*pResult = 0;
}
3. 對禁用節(jié)點進行自畫, 用圖標,顏色將禁用節(jié)點和其他節(jié)點進行區(qū)分
a) 直接在 WM_PAINT 中進行自畫 (或?qū)ree Control的繪圖結(jié)果進行修改)
可以參考: 如何在樹型控件中使用背景位圖
b) 相應 WM_OWERDRAW 事件
可以參考: Outlook風格的單列使用不同的顏色顯示新郵件數(shù)
參考:
MFC Tree Control: How to disable an item?
Setting color and font attribute for individual items