win32自绘按钮,使用GDI+(二)
一、解决上一篇的两个问题。
1、按钮背景透明
方法是,在绘制按钮之前,向按钮的父窗口发生WM_CTLCOLORBTN消息。该消息返回一个画刷句柄,系统使用该画刷句柄画出按钮的背景。所以我们在处理这个消息的时候,为系统返回一个空的画刷句柄就可以了。
直接在回调函数中添加代码
case WM_CTLCOLORBTN:
{
HBRUSH hBrush;
//hBrush = CreateSolidBrush(RGB(255, 0, 0));
hBrush=(HBRUSH)GetStockObject(NULL_BRUSH);
return (long)hBrush;
}
去掉FillRec函数,仍然可以实现下图效果:

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, ,);
效果如下

三、接下来还有一个问题,就是怎样实现鼠标点击按钮和移动到按钮上,按钮具有某种特效,比如,背景色改变之类的。最后找到的方法是处理WM_MOUSEMOVE,WM_MOUSEHOVER和WM_MOUSELEAVE消息,为此似乎要为按钮窗口定义窗口过程。So, try to do it
win32自绘按钮,使用GDI+(二)的更多相关文章
- win32自绘按钮,使用GDI+(三)
解决前面的问题.实现鼠标移动进入到按钮的特效. 效果是这样的 鼠标移到按钮上,改变按钮的颜色(这里用的是直接换贴在按钮上的图片) 程序运行 鼠标进入按钮 代码 #ifndef ULONG_PTR // ...
- win32自绘按钮,使用GDI+(一)
第一次写随笔,我本来想将win32窗口的标题栏设置成渐变色,像这样的效果 但发现找不到设置标题栏属性的api,SetWindowLong也只是增减窗口的固定的样式而已.所以想到一个思路,把标题栏去掉, ...
- VC++ WIN32 sdk实现按钮自绘详解 之二(关键是BS_OWNERDRAW和WM_DRAWITEM)
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
- VC++ WIN32 sdk实现按钮自绘详解 之二.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
- VC++ WIN32 sdk实现按钮自绘详解.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片: 首先建立一个标准的Win32 Application 工程.选择a simple Wi ...
- swing重绘按钮为任意形状图案的方法
swing重绘按钮为任意形状图案的方法 摘自https://www.jb51.net/article/131290.htm 转载 更新时间:2017年12月22日 13:43:00 作者:_Th ...
- MFC自绘按钮的实现,按钮动态效果
最近项目需要实现按钮的动态效果,多方学习,现在终于能实现一些功能了. 过程如下: 第一,新建一MFC对话框应用程序. 第二,删除自带按钮,并添加两个按钮,button1,button2,ID为IDB_ ...
- 自绘按钮,添加Color属性(转载)
在标准的Windows程序中所有按钮均没有颜色.因此Delphi提供的所有按钮组件也均无颜色属性,有时你可能做了一个五颜六色的程序界面,而按钮颜色可能很不相称. 在此本人提供一种用自定义组件制作有颜色 ...
- bootstrap基础学习【表单含按钮】(二)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- Mac OS X下重启apache
打开终端 重启apache:sudo /usr/sbin/apachectl restart 关闭apache:sudo /usr/sbin/apachectl stop 开启apache:sudo ...
- winform 实现pdf浏览
1.开发工具:VS2013 2.开发环境:win 10 64位 3.添加控件: 打开VS,点击工具箱--常规--右键--“选择项”---“Com组件”,选择Adobe PDF Reader控件(在这之 ...
- <button>标签与<input type="button">标签
<script type="text/javascript" src="/jquery-1.11.3.min.js"></script> ...
- Delphi 中同类型方法的说明
对象的方法能定义成静态(static).虚拟(virtual).动态(dynamic)或消息处理(message).请看下面 的例子: TFoo = class procedure IAmAStati ...
- SET ANSI_NULLS ON ……
SET QUOTED_IDENTIFIER ON SET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO 是什么意思? 语法 SET QUOT ...
- HTML 中级
abbr(表示它所包含的文本是一个更长的单词或短语的缩写形式): <p>This web site is about <abbr title="HyperText Mark ...
- 【转】Weblogic的集群
原文链接:http://www.cnblogs.com/HondaHsu/p/4267972.html 一.Weblogic的集群 还记得我们在第五天教程中讲到的关于Tomcat的集群吗? 两个tom ...
- JAVA内存管理
java与c++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙.墙外面的人想进去,墙里面的人想出去. 1.java内存分布 程序计数器 栈(局部变量.操作数.动态链接.方法出口) 每一个方法从调用 ...
- 作业3(PSP表格)
PSP2.1 Personal Software Process Stages Time(min) Planning 计划 11 Estimate 估计 ...
- QT_BEGIN_NAMESPACE和QT_END_NAMESPACE的作用
本文根据在网上找到的一些资料总结来的,并加入了一些自己的想法. 在源代码中是这样定义的: # define QT_BEGIN_NAMESPACE namespace QT_NAMESPACE { # ...