版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在VC+中改变CTreeCtrl子项Item字体和颜色Setting color and font attribute of the item for CTreeCtrl in VC+.翻译Zafir Anjum 的文章Setting color and font attribute for individual items原文通过定义一个继承CTreeCtrl的类来实现改变子项字体和颜色:首先定义一个字体、颜色的结构体:protected:struct Color_Font COLORREF color; LOGFONT logfont;使用C
2、Map来保存各个Item对应的字体、颜色信息CMap< void*, void*, Color_Font, Color_Font& > m_mapColorFont ;添加设置字体、颜色、粗体的函数void CTreeCtrlX:SetItemFont(HTREEITEM hItem, LOGFONT& logfont)Color_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) ) cf.color = (COLORREF)-1;cf.logfont = logfont;m_mapColorFo
3、nthItem = cf;void CTreeCtrlX:SetItemBold(HTREEITEM hItem, BOOL bBold)SetItemState( hItem, bBold ? TVIS_BOLD: 0, TVIS_BOLD );void CTreeCtrlX:SetItemColor(HTREEITEM hItem, COLORREF color)Color_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) ) cf.logfont.lfFaceName0 = '0'cf.color =
4、color;m_mapColorFonthItem = cf;BOOL CTreeCtrlX:GetItemFont(HTREEITEM hItem, LOGFONT * plogfont)Color_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) ) return FALSE;if( cf.logfont.lfFaceName0 = '0' ) return FALSE;*plogfont = cf.logfont;return TRUE;BOOL CTreeCtrlX:GetI
5、temBold(HTREEITEM hItem)return GetItemState( hItem, TVIS_BOLD ) & TVIS_BOLD;COLORREF CTreeCtrlX:GetItemColor(HTREEITEM hItem)/ Returns (COLORREF)-1 if color was not setColor_Font cf;if( !m_mapColorFont.Lookup( hItem, cf ) ) return (COLORREF)-1;return cf.color;添加WM_PAINT 信息监控,重载OnPain
6、t()函数来实现绘制afx_msg void CMyTreeCtrl:OnPaint()/获取当前绘制对象的DCCPaintDC dc(this);/ 使用将要绘制的对象的DC创建一个memory DC/memory device context的概念:是在内存中创建一个结构来反映一个显示(屏幕区域、窗口、/打印机等)的表面。可以用来先在内存中准备好要显示的图像,从而实现双缓存,提高刷新/速度减少刷新时产生的闪烁。CDC memDC;/从当前DC创建内存对象memDC.CreateCompatibleDC( &dc );/定义CRect对象,用来确定区域CRect rcClip, rc
7、Client;/获取当前对象的边界区域dc.GetClipBox( &rcClip );/获取当前对象的用户区域GetClientRect(&rcClient);/ Select a compatible bitmap into the memory DC/创建一个bmp文件,作为memDC的内容/该文件的大小与用于区域相同CBitmap bitmap;bitmap.CreateCompatibleBitmap( &dc, rcClient.Width(), rcClient.Height() );memDC.SelectObject( &bitmap );/
8、Set clip region to be same as that in paint DC/通过对象的边界区域创建CRgn对象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 );/获取树状控件的第一个节点
9、HTREEITEM hItem = GetFirstVisibleItem();/遍历这棵树int n = GetVisibleCount()+1;while( hItem && n-) CRect rect; / Do not meddle with selected items or drop highlighted items /不对选中的节点和实行拖放功能的节点进行操作 UINT selflag = TVIS_DROPHILITED | TVIS_SELECTED;
10、; /定义字体、颜色 Color_Font cf; /设置字体 if ( !(GetItemState( hItem, selflag ) & selflag ) && m_mapColorFont.Lookup( hItem, cf ) CFont *pFontDC; CFont f
11、ontDC; LOGFONT logfont; if( cf.logfont.lfFaceName0 != '0' ) /用户定义了字体 logfont = cf.logfont; else / 用户没有定义,使用系统
12、字体 CFont *pFont = GetFont(); pFont->GetLogFont( &logfont ); /用户是否设定节点为加粗 if( GetItemBold( hItem ) ) logfont.lfWeight = 700; /创建字体
13、fontDC.CreateFontIndirect( &logfont ); pFontDC = memDC.SelectObject( &fontDC ); /设置字体颜色 if( cf.color != (COLORREF)-1 ) memDC.SetTextColor( cf.color ); /获取节点文字
14、160; CString sItem = GetItemText( hItem ); /获取节点区域 GetItemRect( hItem, &rect, TRUE ); /设置背景色为系统色 memDC.SetBkColor( GetSysColor( COLOR_WINDOW ) ); /向内存中的图片写入内容,为该节点的内容
15、0; 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 );CTre
16、eCtrlX.CPP源代码:/ TreeCtrlX.cpp : implementation file/#include "stdafx.h"#include "CTreeCtrlEX.h"#include "TreeCtrlX.h"#include <afxtempl.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endifCMap<void*, void*, Color_Font, Color
17、_Font&>m_mapColorFont;/ CTreeCtrlXCTreeCtrlX:CTreeCtrlX()CTreeCtrlX:CTreeCtrlX()BEGIN_MESSAGE_MAP(CTreeCtrlX, CTreeCtrl)/AFX_MSG_MAP(CTreeCtrlX)ON_WM_PAINT()/AFX_MSG_MAPEND_MESSAGE_MAP()/ CTreeCtrlX message handlersvoid CTreeCtrlX:SetItemFont(HTREEITEM hItem, LOGFONT &logfont)Color_Font c
18、f;if (!m_mapColorFont.Lookup(hItem, cf)cf.color = (COLORREF) - 1;cf.logfont = logfont;m_mapColorFonthItem = cf;void CTreeCtrlX:SetItemBold(HTREEITEM hItem, BOOL bBold)SetItemState(hItem, bBold?TVIS_BOLD:0, TVIS_BOLD);void CTreeCtrlX:SetItemColor(HTREEITEM hItem, COLORREF color)Color_Font cf;if (!m_m
19、apColorFont.Lookup(hItem, cf)cf.logfont.lfFaceName0 = '0'cf.color = color;m_mapColorFonthItem = cf;BOOL CTreeCtrlX:GetItemFont(HTREEITEM hItem, LOGFONT *plogfont)Color_Font cf;if (!m_mapColorFont.Lookup(hItem, cf)return FALSE;if (cf.logfont.lfFaceName0 = '0')return FALSE;*plogfont =
20、cf.logfont;return TRUE;BOOL CTreeCtrlX:GetItemBold(HTREEITEM hItem)return GetItemState(hItem, TVIS_BOLD)&TVIS_BOLD;COLORREF CTreeCtrlX:GetItemColor(HTREEITEM hItem)Color_Font cf;if (!m_mapColorFont.Lookup(hItem, cf)return (COLORREF)-1;return cf.color;void CTreeCtrlX:OnPaint() CPaintDC dc(this);
21、/ device context for painting/ TODO: Add your message handler code hereCDC memDC;memDC.CreateCompatibleDC(&dc);CRect rcClip, rcClient;dc.GetClipBox(&rcClip);GetClientRect(&rcClient);CBitmap bitmap;bitmap.CreateCompatibleBitmap(&dc, rcClient.Width(), rcClient.Height();memDC.SelectObje
22、ct(&bitmap);CRgn rgn;rgn.CreateRectRgnIndirect(&rcClip);memDC.SelectClipRgn(&rgn);rgn.DeleteObject();CWnd:DefWindowProc(WM_PAINT, (WPARAM)memDC.m_hDC, 0);HTREEITEM hItem = GetFirstVisibleItem();int n = GetVisibleCount() + 1;while (hItem&&n-)CRect rect;UINT setflag = TVIS_DROPHILITED|TVIS_SELECTED;Color_Font cf;if (!(GetI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 浙江安防职业技术学院《中学语文课程教学论》2023-2024学年第一学期期末试卷
- 数独答案生成器-20220303010135
- 数字教学实践报告
- 经典搞笑语录集锦
- 部编版2024-2025学年六年级上语文寒假作业(七)(有答案)
- 浙江省杭州市拱墅区源清中学2024-2025学年高一(上)期中物理试卷(含答案)
- 2025届吉林省前郭尔罗斯蒙古族自治县第五高级中学高三上学期第五次考试历史试题(纲要上下 选择性必修三册)(含答案解析)
- 《色达佛学院全景》课件
- 伊春职业学院《台词与表演》2023-2024学年第一学期期末试卷
- 二零二五年度城市综合体土石方运输及配套设施合同3篇
- 2025年河南鹤壁市政务服务和大数据管理局招聘12345市长热线人员10人高频重点提升(共500题)附带答案详解
- 建设项目安全设施施工监理情况报告
- 春节期间安全施工措施
- 2025年大唐集团招聘笔试参考题库含答案解析
- 建筑工地春节期间安全保障措施
- 路面弯沉温度修正系数
- TLFSA 003-2020 危害分析与关键控制点(HACCP)体系调味面制品生产企业要求
- LY/T 2244.3-2014自然保护区保护成效评估技术导则第3部分:景观保护
- 纪律教育月批评与自我批评五篇
- GB/T 26480-2011阀门的检验和试验
- GB/T 13342-2007船用往复式液压缸通用技术条件
评论
0/150
提交评论