Tree Control : how to disable an item
Tree Control 不支持節(jié)點(diǎn)的禁用, 但是可以通過(guò)自繪實(shí)現(xiàn), 主要如下:
1. 標(biāo)記節(jié)點(diǎn)是否禁用. 可以用 SetItemData & GetItemData 來(lái)設(shè)置&獲取節(jié)點(diǎn)數(shù)據(jù)
2. 在禁用的節(jié)點(diǎn)上, 要過(guò)濾一些對(duì)節(jié)點(diǎn)操作, 如expanding, selecting, drag & drop 等.
TVN_SELCHANGING 節(jié)點(diǎn)選中改變時(shí)
TVN_ITEMEXPANDING 節(jié)點(diǎn)展開(kāi)時(shí)
TVN_BEGINDRAG 節(jié)點(diǎn)開(kāi)始被拖拉
TVN_BEGINLABELEDIT 節(jié)點(diǎn)被編輯
//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; // 設(shè)置 *pResult=1 表示TVN_SELCHANGING 這個(gè)操作不能繼續(xù)
return;
}
*pResult = 0;
}
3. 對(duì)禁用節(jié)點(diǎn)進(jìn)行自畫(huà), 用圖標(biāo),顏色將禁用節(jié)點(diǎn)和其他節(jié)點(diǎn)進(jìn)行區(qū)分
a) 直接在 WM_PAINT 中進(jìn)行自畫(huà) (或?qū)ree Control的繪圖結(jié)果進(jìn)行修改)
可以參考: 如何在樹(shù)型控件中使用背景位圖
b) 相應(yīng) WM_OWERDRAW 事件
可以參考: Outlook風(fēng)格的單列使用不同的顏色顯示新郵件數(shù)
參考:
MFC Tree Control: How to disable an item?
Setting color and font attribute for individual items