流程介绍

自定义按钮实际上就是新建一个自定义类,系统标准按钮也不知道能不能重绘,反正我不知道怎么去重绘,只能新建一个类自己去画了。
画一个自定义控件很简单,用RegisterClass注册一个类,然后在回调函数的WM_PAINT属性中用GDI去画控件。

代码解释

注册类只能在CreateWindow之前执行,所以我们找到注册顶级容器类的地方,在下面修改一下wndclass的属性再注册,代码如下: enter image description here

BtnWndProc是我们自定义按钮的回调函数名。
光标使用手型,类名为FButton,也就是系统标准按钮类名前加了个F。
修改完毕后注册一下就可以了。
然后我们在WndProc的WM_CREATE消息中使用CreateWindow新建自定义按钮,我们只要把类名改一下就可以了,代码如下:
enter image description here

接下来写BtnWndProc函数,模板采用WndProc,我们只修改WM_PAINT消息,给这个按钮画一个边框,我们使用GDI函数的BeginPaint、EndPaint、MoveToEx和LineTo,代码如下:
enter image description here

HDC和PAINTSTRUCT作为绘图相关的信息。
BeginPaint和EndPaint函数作为为指定窗口进行绘图的范围,BeginPaint通知操作系统准备绘图,EndPaint结束绘图。
MoveToEx相当于是将画笔移动到指定坐标,这里设定是(0, 0)。
LineTo是从MoveToEx或是上一个LineTo开始向指定坐标绘制线段,我们这里执行了四次,也就是为按钮画了一个框,运行效果如下:
enter image description here

在左上角我们就画了一个框了,并且鼠标移上去会变成手型,这就是我们之前注册类时的IDC_HAND。 只不过这看起来就是一个框,根本不像是一个按钮,而且连文本都没有,点击也没有任何反应。
别急,下一节课我们来调整自定义按钮。