win32的setwindowlong用法详解 将透明窗口A叠加到 渲染了视频的窗口B上
时间: 2023-11-29 20:05:08 浏览: 42
win32的SetWindowLong是一个强大的API函数,它可以用于设置窗口的属性和风格。在本例中,我们将使用SetWindowLong将透明窗口A叠加到渲染了视频的窗口B上。
首先,我们需要创建一个透明窗口A,并且将其设置为透明。这可以通过在窗口类的WndProc函数中处理WM_PAINT消息并将背景设置为透明来完成。具体实现方法如下:
```c
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_PAINT:
{
HDC hdc;
PAINTSTRUCT ps;
hdc = BeginPaint(hWnd, &ps);
SetBkMode(hdc, TRANSPARENT);
TextOut(hdc, 0, 0, "Hello, World!", 13);
EndPaint(hWnd, &ps);
}
break;
case WM_ERASEBKGND:
return 1;
default:
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
return 0;
}
```
接下来,我们需要创建一个渲染了视频的窗口B。这可以通过使用DirectX或OpenGL等图形库来完成。在本例中,我们将假设已经有一个名为“VideoWnd”的窗口,该窗口已经渲染了视频。
现在,我们需要将透明窗口A叠加到窗口B上。这可以通过使用SetWindowLong函数来完成。具体实现方法如下:
```c
HWND hWndA = CreateWindowEx(
WS_EX_LAYERED | WS_EX_TRANSPARENT,
"TransparentWindowClass",
"Transparent Window",
WS_POPUP,
0, 0, 100, 100,
NULL, NULL, hInstance, NULL);
SetLayeredWindowAttributes(hWndA, RGB(255, 255, 255), 0xFF, LWA_COLORKEY | LWA_ALPHA);
SetWindowLongPtr(hWndA, GWLP_HWNDPARENT, (LONG_PTR)hWndB);
ShowWindow(hWndA, SW_SHOWNORMAL);
UpdateWindow(hWndA);
```
在上面的代码中,我们首先创建一个透明窗口A,并将其设置为透明。然后,我们使用SetWindowLong函数将透明窗口A的父窗口设置为窗口B。这将使透明窗口A出现在窗口B的上方。最后,我们使用ShowWindow和UpdateWindow函数显示透明窗口A。
通过上述方法,我们可以将透明窗口A叠加到渲染了视频的窗口B上。