我正在处理win32。我创建了一个窗口。我想要的是单击区域的透明窗口,但边框不透明。没有标题栏的Extrasly。它看起来应该像一个空的矩形。当我添加以下代码时,我的整个窗口变得透明(边界也透明)。
SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(hwnd, RGB(0, 0, 0), 75, LWA_ALPHA);
SetWindowLong(hwnd, GWL_STYLE, 0);
通过添加上面的代码,我的代码输出如下:
不透明度值为255时:
不透明度值为75时
如您所见,边框也是透明的。如何防止变成透明边框,但获得矩形的透明单击区域?谢谢...
看来您想使窗口的一部分透明。为此,您需要创建两个窗口才能完成。
使用SetWindowRgn创建带有孔的窗口
使用WS_EX_LAYERED
和WS_EX_TRANSPARENT
样式放置孔中的另一个透明窗口。
喜欢这个:
某些代码:
hWnd = CreateWindowEx(0, szWindowClass, szTitle, WS_VISIBLE | WS_POPUP, 100, 100, 800, 620, NULL, NULL, hInst, 0);
child = CreateWindowEx(WS_EX_LAYERED, szWindowClass, szTitle, WS_POPUP | WS_VISIBLE | WS_CHILD, 300, 300, 200, 300, hWnd, NULL, hInst, 0);
SetLayeredWindowAttributes(child, RGB(0, 0, 0), 75, LWA_ALPHA);
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code that uses hdc here...
RECT rect;
RECT rc;
COLORREF brColor;
brColor = RGB(200, 204, 40);
hBr = CreateSolidBrush(brColor);
GetClientRect(hWnd, &rect);
rc.left = 200;
rc.top = 200;
rc.right = 400;
rc.bottom = 400;
hRgnWnd = CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
hRgnWnd1 = CreateRectRgn(rc.left, rc.top, rc.right, rc.bottom);
CombineRgn(hRgnWnd1, hRgnWnd1, hRgnWnd, RGN_XOR);
SetWindowRgn(hWnd, hRgnWnd1, true);
FillRect(hdc, &rect, hBr);
EndPaint(hWnd, &ps);
}