【C++】自绘控件基础
由于我们对控件的功能、外观的需求,公共控件并不能很好地满足这一点,所以我们就得自绘控件。
自绘控件有许多方法,比如:处理WM_PAINT消息,设置ownDraw风格,处理WM_CTLCOLOR消息,等。
之前见过有网友发表过自定义绘制的方法,但目前我只了解前面这几个方法,日后有机会再补充。
处理WM_PAINT消息
这个应该是最容易想到的方法。在windowProc()函数中处理WM_PAINT消息,这可能出现一些琐事,比如创设备上下文,决定控件的位置等。这理就不详细解释,具体可以看《window程序设计》。
设置ownDraw风格
这个方法也就是所有者绘制方法。它是用于开发自定义控件最普通的技术,因为在呈现控件的那一刻,Windows就已经填写了设备上下文,决定控件大小和位置等,不必像处理WM_PAINT消息那样什么都要自已过一遍。
这个方法是要重载DrawItem()函数,函数注意与OnDrawItem()区分开。当我们重载DrawItem()函数时,它是在它的宿主类的OnDrawItem()中被调用的。
我们可以在PreSubclassWindow()函数中设置控件的BS_OWNERDRAW属性,不过这会去掉其它的属性。
比如自绘一个CMyButton:
void CMyButton::PreSubclassWindow()
{
CButton::PreSubclassWindow(); ModifyStyle(0, BS_OWNERDRAW);
}
处理WM_CTLCOLOR消息
这个方法只提供改变控件的颜色,并且不提供控件本身之外的更多功能。
与消息对应的OnCtlColor()函数,其返回值是一个刷子句柄,该刷子将被用于画出控件的背景。当要画出一个子控件时,框架就调用这个成员函数。
其类别有如下几种:
CTLCOLOR_BTN 按钮控件
CTLCOLOR_DLG 对话框
CTLCOLOR_EDIT 编辑框
CTLCOLOR_LISTBOX 列表框
CTLCOLOR_MSGBOX 消息框
CTLCOLOR_SCROLLBAR 滚动条
CTLCOLOR_STATIC 静态文本
【C++】自绘控件基础的更多相关文章
- MFC基础,MFC自绘控件学习总结.---转
前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...
- MFC自绘控件学习总结
前言:从这学期开始就一直在学习自绘控件(mfc),目标是做出一款播放器界面,主要是为了打好基础,因为我基础实在是很烂....说说我自己心得体会以及自绘控件的方法吧,算是吐槽吧,说的不对和不全的地方,或 ...
- MFC之自绘控件
在描绘MFC界面时,MFC自带的控件样式是绝对不满足界面的需求的. 所以我们就要在MFC自带控件基础上对控件样式进行重绘. 在采用自绘前界面样式 采用自绘后界面样式 是不是自绘控件后看起来正常了很多? ...
- Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public constructor Create(...); ov ...
- Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm
Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...
- android图片验证码--自绘控件
自绘控件的内容都是自己绘制出来的 大致流程如下: 1.定义一个类继承view 使用TypedArray初始化属性集合 在view的构造方法中 有一个AttributeSet的参数 很明显是用来保存控件 ...
- MFC自绘控件学习总结第二贴---转
首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/2011071 ...
- MFC自绘控件学习总结第二贴
首先感谢大家对第一帖的支持,应一些网友烈要求下面我在关于上一贴的一些补充和说明(老鸟可以无视)这一贴是实战+理论不知道第一帖的先看第一帖:http://topic.csdn.net/u/2011071 ...
- 重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree
原文:重新想象 Windows 8 Store Apps (17) - 控件基础: Measure, Arrange, GeneralTransform, VisualTree [源码下载] 重新想象 ...
随机推荐
- c++模板使用出错情况error LNK2019: unresolved external symbol "public: float __thiscall Compare<float>::min(void)" (?min@?$Compare@M@@QAEMXZ) referenced in function _main
将类模板在头文件中定义,类的成员函数在头文件中声明,头文件中只留下接口,函数的实现在另一个.cpp文件中,这样编译出来错误error LNK2019: unresolved external symb ...
- div赋值,取值和input赋值,取值
一.div取值 <div id="txtXiaofei" class="txt-panel">你好</div> 获取div的值$(&qu ...
- SQL Server Management Studio 2012 设置脚本默认保存路径
特别说明,本文是从这里 修改SQL Server Management Studio默认设置提高开发效率. "抄过来的",为方便个人记忆才写此文(非常感谢这哥们儿的分享.) 原文地 ...
- 全自动ARP实时绑定BAT文件
全自动ARP实时绑定BAT文件 说明一下,这个BVS脚本,它会每六秒钟清除一次ARP缓存.并绑定网关.真正做到了实时防护! 代码如下:请另存为.BAT文件.再运行一下,就可以了 path c:\;c: ...
- IOS中无缓存的图片载入
在IOS中,我们常用[UIImage imageNamed]方法获取图像,这种方法简便,容易理解.但是有个缺点,就是有缓存.这种方式 传人的图像的就是通过文件名方式文件名.如果,我们内存有限,我们就必 ...
- css鼠标手型cursor中hand与pointer
css鼠标手型cursor中hand与pointer Example:CSS鼠标手型效果 <a href="#" style="cursor:hand"& ...
- Powerdesigner 设置唯一约束
- 禁止盗链,强制回登录页面web.config配置
<system.web> <compilation debug="true" targetFramework="4.5" /> < ...
- Kubernetes1.5正式发布
Kubernetes1.5正式发布 修复了很多已知问题 进一步增强federation相关特性 将PetSet改名为StatefulSet 将ScheduledJobs改名为CronJobs 新增了命 ...
- C# System.Timers.Timer的一些小问题?
比如设置间隔时间是 1000msSystem.Timers.Timer mytimer = new System.Timers.Timer(1000);问题若响应函数执行的时间超过了 1000 ms, ...