连夜打造非客户区自绘类CSkinWndHelper支持MFC,WTL版本

hurryboylqs 2013-10-29 09:48:35
加精
继上次发的一篇MFC非客户区自绘的例子,有同学喜欢用WTL,因为上一个帖子CSDN不允许编辑,故本次连夜打造神器,再发一帖,本次在上次基础上进行一个改进不再依赖CFrameWnd,而是封装一个CSkinWndHelper类,只需在需要绘标题栏分客户区的窗口类声明一个CSkinWndHelper对象,并在OnCreate或者OnInitDialog 中调用Helper类的Attach类即可实现美化非客户区,如有不当之处,可以本贴指正,大家共同学习进步!废话少说,上图,支持MFC,WTL两个版本:





WTL版本源码下载地址:
http://download.csdn.net/detail/hurryboylqs/6472941

MFC版本源码地址(支持任何CWnd派生类的非客户区的美化):
http://download.csdn.net/detail/hurryboylqs/6472929

可用分很多,顺便散散分!
...全文
6411 96 打赏 收藏 转发到动态 举报
写回复
用AI写文章
96 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jackxan 2016-04-18
  • 打赏
  • 举报
回复
感谢大神分享!
u010231493 2015-12-07
  • 打赏
  • 举报
回复
卧槽,,,楼主简直好人呀!!!!!牛逼
blesswind 2015-03-12
  • 打赏
  • 举报
回复
无法打开包括文件:“DUIButton.h”
麻浦区保安 2015-03-10
  • 打赏
  • 举报
回复
不错 楼主争取弄个完整版的。 WTL 界面库太少了!
golden_maple 2014-09-15
  • 打赏
  • 举报
回复
我最近纠结于标题栏重绘,发现个问题始终不明就里,在重绘标题栏后,菜单不见了,就算采用自绘菜单,也无法响应鼠标事件,不知道是什么原因,还望楼主能帮忙分析一下,万分感谢!!!不知道楼主还能看见回帖不!
shuzhongxunyu 2014-04-06
  • 打赏
  • 举报
回复
学习了。很厉害
sky_blue852 2014-03-28
  • 打赏
  • 举报
回复
楼主 你那么牛x 能不能帮我 把我那个帖子 给我解决一下啊
Shonm 2014-03-28
  • 打赏
  • 举报
回复
楼主好人啊 期待楼主开专题讲解各种控件的自绘
向立天 2014-03-24
  • 打赏
  • 举报
回复
您好 我是本版版主 此帖已多日无人关注 请您及时结帖 如您认为问题没有解决可按无满意结帖处理 另外本版设置了疑难问题汇总帖 并已在版面置顶 相关规定其帖子中有说明 您可以根据规定提交您帖子的链接 如您目前不想结帖只需回帖说明 我们会删除此结帖通知 见此回复三日内无回应 我们将强制结帖 相关规定详见界面界面版关于版主结帖工作的具体办法
温柔_ 2014-03-24
  • 打赏
  • 举报
回复
我顶!大神辛苦了。万分感谢!
jdzfjfhnui 2014-02-19
  • 打赏
  • 举报
回复
连夜打造。。。
xingeddx 2014-02-17
  • 打赏
  • 举报
回复
楼主对于三个系统按钮的处理是不是用一个位图把三个按钮给覆盖了,如果是这样的话我发现一个问题,图片如下:

是不是没有把三个按钮完全覆盖的问题呢?
另外,我在SDK下拦截消息,结果也会出现一个问题,望楼主帮忙看一下,
正常情况下我的结果是这样的:

但是当我拖动左边框来回游动时,使窗口的大小不停的变化,最后非客户区不能被我指定的颜色来重画了,非客户区变成白色了。结果如下:
EvNiTian 2014-02-07
  • 打赏
  • 举报
回复
多谢啊啊啊啊
wanglovec 2013-12-20
  • 打赏
  • 举报
回复
这个得顶,很不错啊
小草不无敌 2013-12-20
  • 打赏
  • 举报
回复
补充,以下刚才的问题。 尝试过滤WM_SETCURSOR消息,让Dialog对应的HWnd默认函数处理后再做一次NCPaint,但效果还是不好,还是会闪以下系统默认标题栏。而且觉得这样做也不好,消耗资源。 WM_SETCURSOR消息绘制系统默认标题栏是我单步调试后定位出来的。但我也不清楚默认的Dialog中该消息对应函数具体处理内容,想直接重写也不知道怎么写。
小草不无敌 2013-12-20
  • 打赏
  • 举报
回复
楼主,我有个很严重的问题,处理了很久依旧解决不了。 1. MFC 使用 Dialog建立工程,然后在WM_SHOWWINODW对应响应函数onShowWindow中(已经对你的attach进行修改,增加sendMessage WM_SIZE,改变整个dialog大小,所以得放在OnInitDalog后,不过这个跟我的问题没关系)进行skinWndHelper.attach(m_hwnd) 2. 出现的问题是:程序运行时第一次鼠标移动到标题栏时触发WM_SETCURSOR消息后系统默认标题栏会出现 3. 如果WINDOWStyle里面有设置MAXBTN和MINBTN属性则在第2点中出现的系统默认标题栏同样会出现在最大化后第一次移动到标题栏触发WM_SETCURSOR以及还原後出现。 出现的条件是:Windows 系统风格为 windows经典风格,XP和Win7都会出现, mfc使用dialog(Document view 不会出现这个问题)。 chrome 老一点的版本(26.0)也能发现这个问题。 强烈求楼主解答
greenabc 2013-12-17
  • 打赏
  • 举报
回复
感谢分享!
sishenyihu 2013-12-17
  • 打赏
  • 举报
回复
楼主绝对的大神 ,必须顶~
  • 打赏
  • 举报
回复
高手啊 一直想学这个
温柔_ 2013-11-19
  • 打赏
  • 举报
回复
好的帖子回帖是美德,顶起!!
加载更多回复(74)

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧