Win32自绘Button的实现方法
由于不会MFC来绘制按键,只能通过Win32来绘制按键。那么如何实现自定义按键了,首先你需要做的事情:
1. 根据按键的大小设计好图形大小,和图形的填充色(填充色是为了实现同明效果而必需的)。
2. 创建按键的时候,需要定义BS_OWNERDRAW格式,也就是自己实现绘图。
那么步骤如下:
1. 调用CreateWindow创建按键。
2. 调用SetWindowLong(hBtn, GWL_WNDPROC, (long)BtnProc)将按键消息转给BtnProc来处理:
LRESULTWINAPI CloseBtnProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
{
switch(wMsg)
{
caseWM_LBUTTONDOWN:
//画按键背景
break;
caseWM_LBUTTONUP:
//画按键背景
break;
}
//这条函数必须调用,返回消息到主窗口,不然主窗口消息得不到处理
returnDefWindowProc(hWnd, wMsg, wParam, lParam);
}
3. 在主窗口WM_PAINT消息中,绘制按键背景,主要是为了初始化按键背景。
整个流程就和上面一样,但是还有一些细节问题:
1. 如何实现透明背景?这个可以调用TransparentBlt函数来完成!
2. 怎么解决屏幕闪烁的问题?我是用双缓冲来实现的,具体可以在网上搜索一下相关资料。
总结了一下,其实按键就是一个窗口,绘图的过程和普通的窗口没什么区别。