MFC : Transparent TreeCtrl from CTreeCtrl
发布日期:2021-06-30 22:06:10 浏览次数:2 分类:技术文章

本文共 2279 字,大约阅读时间需要 7 分钟。

今天和别人讨论问题, 说到他要在一个不透明的窗体上放一个透明的CTreeCtrl.

在CodeProject上找了些资料, 集成了一下. 实现了一个简单的效果.

效果图:

工程下载点: 

编译环境 : vs2010 vc++ MFC dlg

代码预览:

CTreeCtrl 的继承类

#pragma once// CMyTreeCtrlclass CMyTreeCtrl : public CTreeCtrl{	DECLARE_DYNAMIC(CMyTreeCtrl)public:	CMyTreeCtrl();	virtual ~CMyTreeCtrl();protected:    //{
{AFX_MSG(CMyTreeCtrl) afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); afx_msg void OnCustomdraw(NMHDR* pNMHDR, LRESULT* pResult); //}}AFX_MSG DECLARE_MESSAGE_MAP()private: CBrush m_Brush;};
// MyTreeCtrl.cpp : implementation file//#include "stdafx.h"#include "testTreeCtrl.h"#include "MyTreeCtrl.h"// CMyTreeCtrlIMPLEMENT_DYNAMIC(CMyTreeCtrl, CTreeCtrl)CMyTreeCtrl::CMyTreeCtrl(){}CMyTreeCtrl::~CMyTreeCtrl(){}BEGIN_MESSAGE_MAP(CMyTreeCtrl, CTreeCtrl)    //{
{AFX_MSG_MAP(CMyTreeCtrl) ON_WM_CTLCOLOR_REFLECT() ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnCustomdraw) //}}AFX_MSG_MAPEND_MESSAGE_MAP()HBRUSH CMyTreeCtrl::CtlColor(CDC* pDC, UINT nCtlColor) { m_Brush.DeleteObject(); m_Brush.CreateStockObject(HOLLOW_BRUSH); pDC->SetBkMode(TRANSPARENT); return (HBRUSH)m_Brush;}void CMyTreeCtrl::OnCustomdraw ( NMHDR* pNMHDR, LRESULT* pResult ){ NMLVCUSTOMDRAW* pLVCD = reinterpret_cast
( pNMHDR ); *pResult = CDRF_DODEFAULT; switch (pLVCD->nmcd.dwDrawStage) { case CDDS_ITEM: case CDDS_POSTPAINT: case CDDS_PREERASE: case CDDS_POSTERASE: case CDDS_ITEMPOSTPAINT : case CDDS_ITEMPREERASE : case CDDS_ITEMPOSTERASE : break ; case CDDS_PREPAINT : *pResult = CDRF_NOTIFYITEMDRAW; break ; case CDDS_ITEMPREPAINT : { pLVCD->clrTextBk = RGB(130, 130, 130); pLVCD->clrText = RGB(39, 39, 39); } break ; }}// CMyTreeCtrl message handlers
调用端代码:

CMyTreeCtrl m_MyTreeCtrl;

void CtestTreeCtrlDlg::DoDataExchange(CDataExchange* pDX){    CDialogEx::DoDataExchange(pDX);    DDX_Control(pDX, IDC_MY_TREE, m_MyTreeCtrl);}
void CtestTreeCtrlDlg::TreeInit(){    HTREEITEM item = NULL;    HTREEITEM itemSub = NULL;            item = m_MyTreeCtrl.InsertItem(L"根节点", NULL);    if (NULL != item)    {        itemSub = m_MyTreeCtrl.InsertItem(L"子节点1", item);        itemSub = m_MyTreeCtrl.InsertItem(L"子节点2", item);        m_MyTreeCtrl.Expand(item, TVE_EXPAND);    }}

转载地址:https://lostspeed.blog.csdn.net/article/details/46851719 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:安装python-2.7.10.amd64, 再安装libxml2-python-2.7.7.win32-py2.7的注册表修改
下一篇:svn Bogus date

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月23日 11时07分15秒