Win32 API - 如何使按钮边缘透明

问题描述 投票:0回答:1

在使用 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()
如何用于静态文本?

winapi
1个回答
0
投票

在 Windows 8 及更高版本上,您可以为子控件(如按钮)提供

WS_EX_LAYERED
窗口样式,然后使用
SetLayeredWindowAttributes()
指定透明颜色以屏蔽您不希望可见的区域。

在 Windows 8 之前,您必须创建一个区域,例如通过

CreateRoundRectRgn()
,然后使用
SetWindowRgn()
将其应用到子控件。

© www.soinside.com 2019 - 2024. All rights reserved.