我正在尝试创建一个圆形按钮。到目前为止,这是我的过程:
创建 BS_BITMAP 样式按钮:
hButton = CreateWindow(L"button",L"Label",WS_CHILD|WS_VISIBLE|BS_BITMAP,
122,363,65,65,hWnd,(HMENU)BUTTON_ID,NULL,NULL);
使用 LoadImage 加载位图。位图是一个正方形,但我只想在中心显示圆圈(稍后会详细介绍):
buttonImage = (HBITMAP)LoadImage(hInstance,L"button.bmp",IMAGE_BITMAP,65,65,
LR_LOADFROMFILE|LR_CREATEDIBSECTION);
设置按钮的图像:
SendMessage(hButton,BM_SETIMAGE,IMAGE_BITMAP,(LPARAM)buttonImage);
为了只显示圆圈,我使用以下内容:
hButtonRgn = CreateEllipticRgn(0,0,65,65);
SetWindowRgn(hButton,hButtonRgn,TRUE);
请注意,我在全局范围内定义了 hButtonRgn 并且不再使用它,因为 SetWindowRgn 的 MSDN 文档指出“系统拥有由区域句柄 hRgn 指定的区域”。
这是问题所在:
该按钮最初仅显示为一个圆圈。但是,单击并按住时,会出现完整的方形位图,圆圈周围有空白区域。然而,在发布后,只有圆圈再次出现。
这是我尝试的解决方案:
单击按钮后,请在按钮周围重新绘制主窗口。然后,在主窗口的 WndProc 中,我执行以下操作:
case WM_PARENTNOTIFY:
if ((int)wParam == WM_LBUTTONDOWN)
{
PAINTSTRUCT ps;
BeginPaint(hWnd, &ps);
pRenderTarget->BeginDraw();
// paint the background surrounding the button in another function
pRenderTarget->EndDraw();
EndPaint(hWnd, &ps);
}
然而,这并没有明显的效果。释放鼠标后按钮显示为圆形,但按住鼠标时显示为正方形。
关于我哪里出错的任何想法?