win32自绘按钮,使用GDI+(二)
2015-12-13 16:12
176 查看
一、解决上一篇的两个问题。
1、按钮背景透明
方法是,在绘制按钮之前,向按钮的父窗口发生WM_CTLCOLORBTN消息。该消息返回一个画刷句柄,系统使用该画刷句柄画出按钮的背景。所以我们在处理这个消息的时候,为系统返回一个空的画刷句柄就可以了。
直接在回调函数中添加代码
去掉FillRec函数,仍然可以实现下图效果:
![](http://images2015.cnblogs.com/blog/831258/201512/831258-20151212014518966-1863619569.png)
2、设置系统菜单栏为渐变色
响应WM_NCPAINT。该消息在窗口框架被绘制时被送去窗口。
这个还没尝试,我还是先一条路走到黑,继续用去掉标题栏,重绘这个思路。
WM_NCPAINT参考https://msdn.microsoft.com/ZH-CN/library/windows/desktop/dd145212(v=vs.85).aspx
二、可以在按钮上贴图,网上有直接将bitmap上面的某一种颜色设置成透明的,但我试过一个程式,貌似透明的色彩会有偏差,这里把这个问题留在这里。这里用到的简单的办法是用GDI+直接加载用ps处理过的透明png图片(GDI的api函数LoadImage不能加载png图片也是郁闷,而ps刚好又不能保存为.bmp背景透明),方法直接加载就可以了
效果如下
![](http://images2015.cnblogs.com/blog/831258/201512/831258-20151213160321466-505365088.png)
三、接下来还有一个问题,就是怎样实现鼠标点击按钮和移动到按钮上,按钮具有某种特效,比如,背景色改变之类的。最后找到的方法是处理WM_MOUSEMOVE,WM_MOUSEHOVER和WM_MOUSELEAVE消息,为此似乎要为按钮窗口定义窗口过程。So, try to do it
1、按钮背景透明
方法是,在绘制按钮之前,向按钮的父窗口发生WM_CTLCOLORBTN消息。该消息返回一个画刷句柄,系统使用该画刷句柄画出按钮的背景。所以我们在处理这个消息的时候,为系统返回一个空的画刷句柄就可以了。
直接在回调函数中添加代码
case WM_CTLCOLORBTN: { HBRUSH hBrush; //hBrush = CreateSolidBrush(RGB(255, 0, 0)); hBrush=(HBRUSH)GetStockObject(NULL_BRUSH); return (long)hBrush; }
去掉FillRec函数,仍然可以实现下图效果:
![](http://images2015.cnblogs.com/blog/831258/201512/831258-20151212014518966-1863619569.png)
2、设置系统菜单栏为渐变色
响应WM_NCPAINT。该消息在窗口框架被绘制时被送去窗口。
这个还没尝试,我还是先一条路走到黑,继续用去掉标题栏,重绘这个思路。
WM_NCPAINT参考https://msdn.microsoft.com/ZH-CN/library/windows/desktop/dd145212(v=vs.85).aspx
二、可以在按钮上贴图,网上有直接将bitmap上面的某一种颜色设置成透明的,但我试过一个程式,貌似透明的色彩会有偏差,这里把这个问题留在这里。这里用到的简单的办法是用GDI+直接加载用ps处理过的透明png图片(GDI的api函数LoadImage不能加载png图片也是郁闷,而ps刚好又不能保存为.bmp背景透明),方法直接加载就可以了
Graphics graphics( pdis->hDC); Image image(L"bitmap.png", FALSE); graphics.DrawImage(&image, 0,0);
效果如下
![](http://images2015.cnblogs.com/blog/831258/201512/831258-20151213160321466-505365088.png)
三、接下来还有一个问题,就是怎样实现鼠标点击按钮和移动到按钮上,按钮具有某种特效,比如,背景色改变之类的。最后找到的方法是处理WM_MOUSEMOVE,WM_MOUSEHOVER和WM_MOUSELEAVE消息,为此似乎要为按钮窗口定义窗口过程。So, try to do it
相关文章推荐
- 312.Burst Balloons
- iOS UI 12 block传值
- Python 装饰器学习心得
- 快速排序(拔萝卜法,实质就是一直否定寻找数当前的位置,一个萝卜,一个坑)
- [Hearthstone]梦想战
- 1591 浙江中医药大学
- 【BZOJ1045】【codevs1868】糖果传递,数学贪心
- HDU 1031 Design T-Shirt 模拟 水题
- 安卓从其他网站上抓取数据例子
- gradle项目中如何支持java与scala混合使用?
- centos安装软件Error: Cannot find a valid baseurl for repo: base
- 第十周项目2-二叉树遍历的递归算法
- iOS UI 11 单例
- 读懂IL代码就这么简单 (一)
- python3.5读取网页代码,并保存
- iOS UI 11 单例
- leetcode:Majority Element
- java IO读写文件
- HDU 1754_I Hate It
- HDU 1754_I Hate It