Neat Stuff Custom Draw
专门做界面已经有半年了,期间用得最多也就是Owner Draw,对于Cutom Draw只是知之一二,没有具体用过,其实Ower Draw用得最多也就是Button,ListBox两个,由于项目中有个同事把TreeCtrl进行Custom Draw了,效果很不错,这才意识到其强大及易用,相比较而言Ower Draw就复杂多了,今天再次把CP上那篇经典的关于Custom Draw文章看了一篇,用了半个小时写了Slider的Custom Draw,也算是为了练习使用WTL和GDI+:
class CCDSliderCtrl : public CWindowImpl<CCDSliderCtrl,CTrackBarCtrl>, public CCustomDraw<CCDSliderCtrl> { public: BEGIN_MSG_MAP(CCDSliderCtrl) CHAIN_MSG_MAP_ALT(CCustomDraw< CCDSliderCtrl >, 1) DEFAULT_REFLECTION_HANDLER() END_MSG_MAP() public: CCDSliderCtrl():m_pImageThumb(NULL),m_pImageChannel(NULL) { } ~CCDSliderCtrl() { if (NULL!=m_pImageThumb) { delete m_pImageThumb; m_pImageThumb=NULL; } if (NULL!=m_pImageChannel) { delete m_pImageChannel; m_pImageChannel=NULL; } } void SetImage(LPCTSTR lpszThumb,LPCTSTR lpszChannel) { if (NULL!=m_pImageThumb) { delete m_pImageThumb; m_pImageThumb=NULL; } m_pImageThumb=new Image((WCHAR*)lpszThumb); if (NULL!=m_pImageChannel) { delete m_pImageChannel; m_pImageChannel=NULL; } m_pImageChannel=new Image((WCHAR*)lpszChannel); } DWORD OnPrePaint( int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw ) { return CDRF_NOTIFYITEMDRAW; } DWORD OnItemPrePaint( int idCtrl, LPNMCUSTOMDRAW lpNMCustomDraw ) { Graphics graphics(lpNMCustomDraw->hdc); CRect rcThumb(lpNMCustomDraw->rc); switch ( lpNMCustomDraw->dwItemSpec ) { case TBCD_CHANNEL: { CRect rcClient; GetClientRect( &rcClient); ImageAttributes imAtt; imAtt.SetColorKey( Color(255, 0,255), Color(255, 0,255), ColorAdjustTypeBitmap); graphics.DrawImage( m_pImageChannel, Rect(0, 0, rcClient.Width(),rcClient.Height()), // dest rect 0, 0, m_pImageChannel->GetWidth(),m_pImageChannel->GetHeight(), // source rect UnitPixel, &imAtt); break; } case TBCD_TICS: return CDRF_DODEFAULT; case TBCD_THUMB: { graphics.DrawImage(m_pImageThumb,Rect(rcThumb.left,rcThumb.top,rcThumb.Width(),rcThumb.Height())); break; } default: ATLASSERT( FALSE ); }; return CDRF_SKIPDEFAULT; } protected: Gdiplus::Image* m_pImageThumb; Gdiplus::Image* m_pImageChannel; };
下面是效果图:
Neat Stuff Custom Draw相关推荐
- Custom Draw
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...
- 【第3版emWin教程】第8章 emWin6.x的带OS方式移植(STM32H7之RGB接口)
教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第8章 emWin6.x的带OS方式移植(STM32H7之R ...
- VC/MFC QA 200407
CSDN 讨论总结系列: Jiangsheng的CSDN Digest (Dec 2005)(http://blog.csdn.net/jiangsheng/archive/2005/12/24/56 ...
- Windows Vista for Developers——第三部分补充:控件和桌面窗口管理器
作者:Kenny Kerr 翻译:Dflying Chen 原文:http://weblogs.asp.net/kennykerr/archive/2007/01/23/controls-and-th ...
- TeeChart.Direct2D.dll的使用
这个dll本身依赖于第三方的控件,SlimDX ,可以从 http://slimdx.org/ 下载. .net4.0的版本区分x86和x64 帧数的概念 我们通常说帧数,简单地说,就是在1秒钟时间 ...
- 王哲:Cocos2d-x 3.0引擎带来了什么?
触控科技近日发布了Cocos2d-x3.0RC版本,主打开放.原生.创新路线.作为全球三大游戏引擎之一,Cocos2d-x吸引了国内外一批优秀的开发者和游戏作品,包括<放开那三国>.< ...
- 设置ListCtrl列表控件其中某一行的字体和背景颜色
设置ListCtrl列表控件其中某一行的字体和背景颜色,可以最终达到如下效果: 操作步骤如下所示: 1.先添加一个自定义消息 ON_NOTIFY ( NM_CUSTOMDRAW,IDC_V_H264_ ...
- 2g内存用linux的哪个版本,Linux 下安装sql server 时 2G内存限制的最新(2019-08-15) 解决方案...
关于 sqlserver 在linux下安装时有最小内存限制的问题,网上有很多类似的说明,那些操作都是正确的,如果不成功可能 "姿势"不对. 需要注意的是:不能使用最新版本!!! ...
- NM_CUSTOMDRAW消息
common control 4.7版本介绍了一个新的特性叫做Custom Draw,这个名字显得模糊不清,让人有点摸不着头脑,而且MSDN里也只给出了一些如风的解释和例子,没有谁告诉你你想知道的,和 ...
最新文章
- Attribute 绑定、类绑定和样式绑定
- 管理软件预警通知(Notification)功能的实现案例分析
- 你不曾见过的酷炫地图可视化作品(一)
- Hibernate @OneToMany 及 @Cascade级联操作
- RHEL4-VNC服务配置
- 匿名内部类与Lambda表达式习题
- CSS3 box-shadow 属性
- 【Python】Python3.7.3 - Collections (Arrays) - List数据类型
- C++共享内存类封装
- JMeter测试实例
- L2TP的LAC自动拨号实验
- 计算机网络原理(04741)第1章:计算机网络概述
- 小程序如何访问未备案的 API
- 01.14_学习Java的day23(详解)
- VTK_Learning_交互与拾取_单位拾取
- ERP如何为企业带来效益?
- 股票level2数据接口获取逐笔成交数据的过程
- Postgressql获取当前系统的年份及上一年和下一年
- 我为什么信主---为主作见证
- 【数据库笔记】(一)数据库模式