/////////////////////////////////////////////////////////////
//
// Author: Sami (M.ALSAMSAM), ittiger@ittiger.net
//
// Filename: TreeCtrlEx.cpp
//
// http : www.ittiger.net
//
//////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "ColorTree.h"
#include "TreeCtrlEx.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////
CTreeCtrlEx::CTreeCtrlEx()
{
}
CTreeCtrlEx::~CTreeCtrlEx()
{
}
//////////////////////////////////
IMPLEMENT_DYNAMIC(CTreeCtrlEx, CTreeCtrl)
BEGIN_MESSAGE_MAP(CTreeCtrlEx, CTreeCtrl)
//{{AFX_MSG_MAP(CTreeCtrlEx)
ON_WM_PAINT()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//////////////////////////////////////////////////////////////////////
void CTreeCtrlEx::SetItemFont(HTREEITEM hItem, LOGFONT& logfont)
{
Color_Font cf;
if( !m_mapColorFont.Lookup( hItem, cf ) )
cf.color = (COLORREF)-1;
cf.logfont = logfont;
m_mapColorFont[hItem] = cf;
}
//////////////////////////////////////////////////////////////////////
void CTreeCtrlEx::SetItemBold(HTREEITEM hItem, BOOL bBold)
{
SetItemState(hItem, bBold ? TVIS_BOLD: 0, TVIS_BOLD);
}
//////////////////////////////////////////////////////////////////////
void CTreeCtrlEx::SetItemColor(HTREEITEM hItem, COLORREF color)
{
Color_Font cf;
if(!m_mapColorFont.Lookup(hItem, cf))
cf.logfont.lfFaceName[0] = '\0';
cf.color = color;
m_mapColorFont[hItem] = cf;
}
//////////////////////////////////////////////////////////////////////
BOOL CTreeCtrlEx::GetItemFont(HTREEITEM hItem, LOGFONT * plogfont)
{
Color_Font cf;
if(!m_mapColorFont.Lookup(hItem, cf))
return FALSE;
if(cf.logfont.lfFaceName[0] == '\0')
return FALSE;
*plogfont = cf.logfont;
return TRUE;
}
//////////////////////////////////////////////////////////////////////
BOOL CTreeCtrlEx::GetItemBold(HTREEITEM hItem)
{
return GetItemState(hItem, TVIS_BOLD) & TVIS_BOLD;
}
//////////////////////////////////////////////////////////////////////
COLORREF CTreeCtrlEx::GetItemColor(HTREEITEM hItem)
{
// Returns (COLORREF)-1 if color was not set
Color_Font cf;
if(!m_mapColorFont.Lookup(hItem, cf))
return (COLORREF) - 1;
return cf.color;
}
//////////////////////////////////////////////////////////////////////
void CTreeCtrlEx::OnPaint()
{
CPaintDC dc(this);
// Create a memory DC compatible with the paint DC
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CRect rcClip, rcClient;
dc.GetClipBox( &rcClip );
GetClientRect(&rcClient);
// Select a compatible bitmap into the memory DC
CBitmap bitmap;
bitmap.CreateCompatibleBitmap( &dc, rcClient.Width(), rcClient.Height() );
memDC.SelectObject( &bitmap );
// Set clip region to be same as that in paint DC
CRgn rgn;
rgn.CreateRectRgnIndirect( &rcClip );
memDC.SelectClipRgn(&rgn);
rgn.DeleteObject();
// First let the control do its default drawing.
CWnd::DefWindowProc(WM_PAINT, (WPARAM)memDC.m_hDC, 0);
HTREEITEM hItem = GetFirstVisibleItem();
int iItemCount = GetVisibleCount() + 1;
while(hItem && iItemCount--)
{
CRect rect;
// Do not meddle with selected items or drop highlighted items
UINT selflag = TVIS_DROPHILITED | TVIS_SELECTED;
Color_Font cf;
//if ( !(GetTreeCtrl().GetItemState( hItem, selflag ) & selflag )
// && m_mapColorFont.Lookup( hItem, cf ))
if ((GetItemState(hItem, selflag) & selflag)
&& ::GetFocus() == m_hWnd)
;
else if (m_mapColorFont.Lookup(hItem, cf))
{
CFont *pFontDC;
CFont fontDC;
LOGFONT logfont;
if(cf.logfont.lfFaceName[0] != '\0')
logfont = cf.logfont;
else {
// No font specified, so use window font
CFont *pFont = GetFont();
pFont->GetLogFont( &logfont );
}
if(GetItemBold(hItem))
logfont.lfWeight = 700;
fontDC.CreateFontIndirect(&logfont);
pFontDC = memDC.SelectObject(&fontDC );
if(cf.color != (COLORREF) - 1)
memDC.SetTextColor(cf.color);
else
memDC.SetTextColor(GetSysColor(COLOR_WINDOWTEXT));
CString sItem = GetItemText(hItem);
GetItemRect(hItem, &rect, TRUE);
memDC.SetBkColor( GetSysColor(COLOR_WINDOW));
memDC.TextOut(rect.left + 2, rect.top + 1, sItem);
memDC.SelectObject(pFontDC);
}
hItem = GetNextVisibleItem(hItem);
}
dc.BitBlt(rcClip.left, rcClip.top, rcClip.Width(), rcClip.Height(), &memDC,
rcClip.left, rcClip.top, SRCCOPY);
memDC.DeleteDC();
}
没有合适的资源?快使用搜索试试~ 我知道了~
重写MFC treectrl控件的一个实例
共17个文件
h:5个
cpp:4个
exe:1个
4星 · 超过85%的资源 需积分: 35 34 下载量 175 浏览量
2014-04-16
14:03:40
上传
评论 2
收藏 17KB ZIP 举报
温馨提示
重写MFC treectrl控件的一个实例 可以设置各个节点为不同背景色
资源推荐
资源详情
资源评论
收起资源包目录
ColorTreeCtrl_demo.zip (17个子文件)
Release
ColorTree.exe 24KB
ColorTree.cpp 1KB
res
ColorTree.rc2 401B
ColorTree.ico 1KB
ColorTree.h 1KB
ColorTree.plg 2KB
TreeCtrlEx.h 1KB
ColorTree.dsp 4KB
ColorTreeDlg.h 1KB
ColorTree.clw 773B
ColorTree.rc 4KB
StdAfx.cpp 211B
resource.h 549B
TreeCtrlEx.cpp 4KB
ColorTree.dsw 543B
StdAfx.h 1KB
ColorTreeDlg.cpp 2KB
共 17 条
- 1
资源评论
- zhuifeideai2014-05-08很不错的列子 值得学习
Andy20081251
- 粉丝: 67
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功