GdiplusFlat(8)自绘按钮的实现(方法1)

本博文由CSDN博主zuishikonghuan所作,版权归zuishikonghuan所有,转载请注明出处: http://blog.csdn.net/zuishikonghuan/article/details/47394747

在上几篇中,我们说到了通过GdipCreateFromHDC函数将HDC(设备上下文句柄)装换成GDI+的Graphics对象,讲到了画笔和画刷的使用,演示了何利用GDI+Flat来画图片和画文字,并讲到了双缓冲绘图和DC复制。

这一篇博文中,我们来聊聊如何用GdiplusFlat来绘制按钮。

还是和以前一样,我们必须自己声明GDI+Flat函数,自己定义GDI+Flat的数据结构。自己动手,丰衣足食。~~

其实,自绘按钮有两种形式,这两种形式分别是:

1。我们不创建按钮,我们直接在窗口的设备上下文场景的一部分上绘制按钮,也就是说不存在一个子窗口,按钮完全是我们自己画上去的。

2。将一个标准的win32按钮子类化(子类化介绍),在按钮的WM_PAINT、WM_MOUSEMOVE、WM_MOUSELEAVE、WM_LBUTTONDOWN、WM_LBUTTONUP消息里面控制按钮的绘制,也就是说,我们直接基于一个Win32按钮,我们是改变了这个win32按钮的实现逻辑,绘制成我们需要的样式,按钮依旧作为子窗口存在。

这一篇文章讲一讲方法1

先看看效果图:(GIF本身的限制,动画有颜色失真)

首先我们用GDI写一个画文字的函数,你可能会问为何费用要用GDI?因为GDI+画文字的居中精度不准,而且GDI绘制效率高,同时我们也不需要花里胡哨的文字。

void WINAPI MyDrawText(HDC hdc, LPCTSTR str, LONG left, LONG top, LONG width, LONG height, BOOL iscenter, COLORREF color = 0){
	SetBkMode(hdc, TRANSPARENT);
	RECT r = { left, top, left + width, top + height };
	HFONT hFont = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
	HFONT hOldFont = (HFONT)SelectObject(hdc, hFont);
	SetTextColor(hdc, color);
	DrawText(hdc, str, -1, &r, iscenter ? DT_CENTER | DT_VCENTER | DT_SINGLELINE : 0);
	SelectObject(hdc, hOldFont);
	DeleteObject(hFont);
}//参数:设备上下文句柄,要绘制的字符串,x位置,y位置,宽度,高度,是否绘制在矩形中央,颜色

之后我们写一个ARGB宏,用于生成ARGB颜色

#define ARGB(a,r,g,b) ((int)(((BYTE)a)<<24)|(((BYTE)r)<<16)|(((BYTE)g)<<8)|((BYTE)b))


我们写一个画按钮的函数

void WINAPI drawbutton(HDC hdc,unsigned int argb){//参数:设备上下文句柄;按钮背景ARGB颜色
	int graphics;
	GdipCreateFromHDC(mdc, &graphics);//创建Graphics
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值