对网上现有资料整理总结
网上所能查到的所有关于树形控件三态显示的做法都是添加一个已写好的CTreeCtrl类的派生类,但经过Q姐琢磨和测试,根本无需再创建一个派生类就能实现树形控件的三态复选,下面分享具体做法。
1.给树形控件绑定变量
CTreeCtrl m_tc;
2.添加三态显示框bmp资源,如下
3.添加树形控件三态显示效果相关函数
//.cpp文件
BOOL CxxxDlg::SetState(HTREEITEM hItem, UINT nState, UINT nStateMask, BOOL bSearch)
{
BOOL bReturn=m_tc.SetItemState( hItem, nState, nStateMask );
UINT iState = nState >> 12;
if(iState!=0)
{
if(bSearch) TravelChild(hItem, iState);
TravelSiblingAndParent(hItem,iState);
}
return bReturn;
}
void CxxxDlg::TravelChild(HTREEITEM hItem, int nState)
{
HTREEITEM hChildItem,hBrotherItem;
//查找子节点,没有就结束
hChildItem=m_tc.GetChildItem(hItem);
if(hChildItem!=NULL)
{
//设置子节点的状态与当前节点的状态一致
m_tc.SetItemState( hChildItem, INDEXTOSTATEIMAGEMASK(nState), TVIS_STATEIMAGEMASK );
//再递归处理子节点的子节点和兄弟节点
TravelChild(hChildItem, nState);