8.VC(ui)-自绘对话框基类

本文介绍如何通过派生自CDialog的CSkinDialogBase类实现自定义对话框的绘制,包括非客户区及客户区底色的重绘,以创建圆角对话框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

所有的对话框都是基于CDialog的,也就都具有CDialog的特征,本文以CDialog为基类派生一个新的类CSkinDialogBase,只需将基于CDialog的对话框中CDialog替换成CSkinDialogBase,则可具有自绘DLG的特征.

下面例子是自己重绘了非客户区及客户区底色完成的一个圆角Dialog的基类,直接上图:

实现步骤:

1.派生自CDialog的类CSkinDialogBase,这时系统会自动生成一个DLG资源,把enum { IDD = ...};删除掉,重载CSkinDialogBase的构造函数:

记得把原来默认的构造函数删除掉

2.在OnNcCalcSize中定义非客户区边框的size,这里用到的绘制边框的图片都是6*5的,所以设置如下:

3.在OnNcHitTest中设置CAPTION的size,将客户区一部分映射为非客户区,以便拖动。

4.将客户区颜色刷为和非客户区绘制一样的颜色,这里为RGB(240,240,240),有两种实现方式,在OnEraseBkgnd中和在OnCtlColor均可实现

 

 5.绘制非客户区,这里必须用CWindowDC来绘制

至此,完成,调用方法很简单:对任意以CDialog为基类的对话框,将CDialog用CSkinDialogBase替换,即可变成上图所示的对话框形状(请将边框设为none)。

本人小菜,随手写的,很多不周,请多指点,3Q。

===》示例源代码下载

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值