checktreectrl.cpp

来自「深入浅出Visual C++入门进阶与应用实例 随书光盘 作者 何志丹」· C++ 代码 · 共 75 行

CPP
75
字号
// CheckTreeCtrl.cpp : implementation file
//

#include "stdafx.h"
#include "Ex040203.h"
#include "CheckTreeCtrl.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CCheckTreeCtrl

CCheckTreeCtrl::CCheckTreeCtrl()
{
}

CCheckTreeCtrl::~CCheckTreeCtrl()
{
}


BEGIN_MESSAGE_MAP(CCheckTreeCtrl, CTreeCtrl)
	//{{AFX_MSG_MAP(CCheckTreeCtrl)
	ON_WM_KEYDOWN()
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CCheckTreeCtrl message handlers

void CCheckTreeCtrl::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	CTreeCtrl::OnKeyDown(nChar, nRepCnt, nFlags);

	//处理空格键
 	if(nChar== ' ')
 	{
 		HTREEITEM hItem = GetSelectedItem();
 		TravelChild(hItem);
 	}
}

void CCheckTreeCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{	
	CTreeCtrl::OnLButtonDown(nFlags, point);

	HTREEITEM hItem = HitTest(point, NULL);
	TravelChild(hItem);
}

void CCheckTreeCtrl::TravelChild(HTREEITEM hItem)
{
	if(NULL == hItem)
		return ;
	
	bool bCheck = GetCheck(hItem);
	
	//查找子节点,没有就结束
	HTREEITEM hChildItem= GetChildItem(hItem);
	while(NULL != hChildItem)
	{
		//设置或取消钩取状态
		SetCheck(hChildItem,bCheck) ;
		//处理子节点
		TravelChild(hChildItem);		
		//下一个兄弟节点
		hChildItem = GetNextSiblingItem(hChildItem);
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?