我有一个带有背景图像的窗口,我想创建一个带有白色边框和半透明背景RGBA(255, 255, 255, 124)的面板(如.NET) ,所以背景中的图像可以是也可见。我应该为此使用STATIC控件还是子窗口?我知道为了设置窗口的RGBA颜色,我必须使用SetLayeredWindowAttributes
,但我不知道这是否适用于STATIC控件。
通常使用什么类型的控件,我可以使用哪些WINAPI函数来设置边框粗细和颜色?谢谢
一些代码:
// Create the static control (inside the WM_CREATE of the parent window)
hPanel = CreateWindowEx(
WS_EX_TRANSPARENT,
L"STATIC",
L"",
WS_CHILD | WS_VISIBLE | SS_WHITEFRAME,
10, 90,
200, 120,
hWnd,
(HMENU)IDC_PANEL,
hInstance,
NULL);
// Trying to set the alpha level
SetWindowLong(hPanel , GWL_EXSTYLE,
GetWindowLong(hPanel , GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hPanel , 0, (255 * 70) / 100, LWA_ALPHA);
// Changing the background color of the STATIC in WM_CTLCOLORSTATIC
case WM_CTLCOLORSTATIC:
hStatic = (HDC)wParam;
switch (GetDlgCtrlID((HWND)lParam)) {
case IDC_PANEL:
SetTextColor(hStatic, RGB(255, 255, 255));
SetBkColor(hStatic, RGB(26, 127, 231));
break;
default:
SetTextColor(hStatic, RGB(255, 255, 255));
SetBkMode (hStatic, TRANSPARENT);
}
return (LRESULT)GetStockObject(NULL_BRUSH);
break;
所以,我用这段代码唯一得到的是一个透明的边框控件。我没有得到背景颜色和 alpha 效果。