如何禁用Tree Control 的節(jié)點(diǎn)
Tree Control : how to disable an item
Tree Control 不支持節(jié)點(diǎn)的禁用, 但是可以通過自繪實(shí)現(xiàn), 主要如下:
1. 標(biāo)記節(jié)點(diǎn)是否禁用. 可以用 SetItemData & GetItemData 來設(shè)置&獲取節(jié)點(diǎn)數(shù)據(jù)
2. 在禁用的節(jié)點(diǎn)上, 要過濾一些對節(jié)點(diǎn)操作, 如expanding, selecting, drag & drop 等.
TVN_SELCHANGING 節(jié)點(diǎn)選中改變時(shí)
TVN_ITEMEXPANDING 節(jié)點(diǎn)展開時(shí)
TVN_BEGINDRAG 節(jié)點(diǎn)開始被拖拉
TVN_BEGINLABELEDIT 節(jié)點(diǎn)被編輯
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. 對禁用節(jié)點(diǎn)進(jìn)行自畫, 用圖標(biāo),顏色將禁用節(jié)點(diǎn)和其他節(jié)點(diǎn)進(jìn)行區(qū)分
a) 直接在 WM_PAINT 中進(jìn)行自畫 (或?qū)ree Control的繪圖結(jié)果進(jìn)行修改)
可以參考: 如何在樹型控件中使用背景位圖
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
posted on 2008-01-14 19:16 泡泡牛 閱讀(1946) 評論(1) 編輯 收藏 引用 所屬分類: Develop