【发布时间】:2011-05-24 18:04:19
【问题描述】:
我正在使用普通的 Win32 API(没有 MFC 或 .NET)开发一个 Win32 GUI 应用程序。我遇到的问题是使控件看起来透明。我想出了一种适用于大多数事情的方法,在 Windows Vista+ 中,我在 WndProc 中执行此操作:
case WM_CTLCOLORSTATIC:
{
SetBkMode((HDC)wParam, TRANSPARENT);
return (INT_PTR)::GetStockObject(NULL_PEN);
}
break;
在 Windows XP 中,我在 WndProc 中执行此操作:
case WM_CTLCOLORSTATIC:
{
HBRUSH hbr = (HBRUSH)DefWindowProc(hDlg, message, wParam, lParam);
::DeleteObject(hbr);
SetBkMode((HDC)wParam, TRANSPARENT);
return (LRESULT)(HBRUSH)(COLOR_WINDOW);
}
现在这适用于大多数控件,但是我在组框控件顶部的标签上获得了透明背景,该控件通过文本绘制了组框线。我开始着手设计一个仅用于组合框的案例,但我确信这是一个以前必须解决的问题,我不想重新发明轮子。
是否有一种久经考验的方法可以使控件显示为透明?
谢谢, J
【问题讨论】:
-
我认为你不应该那样删除画笔...
-
您确定 alpha 通道在您想要的所有平台上都可用吗?那些必须在运行终端服务、远程桌面或 Windows Server 的 PC 上使用您的应用程序的人呢? “所有版本的 Windows”是什么意思?视窗 98?那也是Win32!如果这就是您的意思,也许您可以说“Windows XP 和更高版本的所有 Windows 版本”。
-
您可能是对的,无论我是否删除画笔,它都有效。我不记得我从哪里得到那个代码了,但是有一个关于为什么画笔被这样删除的解释。
-
@Warren - 所有版本我的意思是 2000+,但我没有使用任何 alpha 通道,所以它们是否可用并不重要。
-
您是否尝试过将画笔样式更改为透明(Clear)而不是删除它?我认为这样会更好。
标签: windows winapi user-interface