在使用 Borland VCL、Windows Forms 和 WPF 工作多年之后,我回到了尝试制作一个小而简单的 Win32 API 应用程序的基础知识。
我在窗口背景有一张位图图片,基本上是通过添加:
hbr = CreatePatternBrush(LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP_BG)));
在
WM_PAINT
:
FillRect(wcd.hdc, &wcd.rcPaint, hbr);
我知道可以使用以下方法使静态文本在此图像上显示为透明背景:
SetBkMode((HDC)wParam, TRANSPARENT);
我试过
WS_EX_TRANSPARENT
但它不起作用。
我的问题是按钮。它们的边缘保持白色,例如这是我在 Windows 11 上得到的:
应该使用什么替代方法使按钮的背景透明,例如
SetBkMode()
如何用于静态文本?
在 Windows 8 及更高版本上,您可以为子控件(如按钮)提供
WS_EX_LAYERED
窗口样式,然后使用 SetLayeredWindowAttributes()
指定透明颜色以屏蔽您不希望可见的区域。
在 Windows 8 之前,您必须创建一个区域,例如通过
CreateRoundRectRgn()
,然后使用 SetWindowRgn()
将其应用到子控件。