要使用其句柄更改窗口所有者,您需要使用Windows API函数SetWindowLongPtr
和SetWindowLong
。以下是一个简单的示例,演示如何更改窗口所有者:
#include<Windows.h>
#include<iostream>
SetWindowLongPtr
和SetWindowLong
更改窗口所有者:BOOL SetNewWindowOwner(HWND hWnd, HWND hWndNewOwner)
{
// 获取窗口的当前所有者
HWND hWndOwner = GetWindow(hWnd, GW_OWNER);
// 如果新的所有者与当前所有者相同,则不执行任何操作
if (hWndOwner == hWndNewOwner)
return TRUE;
// 设置新的窗口所有者
LONG_PTR result = SetWindowLongPtr(hWnd, GWLP_HWNDPARENT, (LONG_PTR)hWndNewOwner);
// 检查结果
if (result == 0)
{
std::cerr << "SetWindowLongPtr failed with error code: "<< GetLastError()<< std::endl;
return FALSE;
}
return TRUE;
}
int main()
{
// 创建一个顶级窗口
HWND hWnd = CreateWindowEx(0, "MyWindowClass", "My Window", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, NULL, NULL);
// 创建一个新的窗口所有者
HWND hWndNewOwner = CreateWindowEx(0, "MyWindowClass", "New Owner Window", WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, NULL, NULL);
// 更改窗口所有者
if (!SetNewWindowOwner(hWnd, hWndNewOwner))
{
std::cerr << "Failed to set new window owner"<< std::endl;
return 1;
}
// 处理窗口消息
MSG msg = { 0 };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
这个示例将创建两个顶级窗口,并将第二个窗口设置为第一个窗口的所有者。请注意,这只是一个简单的示例,您可能需要根据您的应用程序需求进行调整。
领取专属 10元无门槛券
手把手带您无忧上云