要将一个窗口置父到外部的D3D窗口中,可以使用win32 API中的SetParent函数。但是,将一个窗口置父后,它的绘制会受到父窗口的影响,所以可能会导致窗口无法显示。这是因为D3D窗口可能会在绘制时覆盖掉子窗口。

为了解决这个问题,你可以尝试在父窗口和子窗口之间创建一个透明的层。这样,子窗口就可以在D3D窗口下面绘制,而不会被覆盖。

下面是一个示例代码,展示了如何将一个窗口置父到外部的D3D窗口中,并添加一个透明层:

import win32api
import win32con
import win32gui

def set_parent(window, parent):
    # 获取父窗口的信息
    parent_info = win32gui.GetWindowRect(parent)
    parent_handle = win32gui.GetWindow(parent, win32con.GW_OWNER)

    # 将窗口置父
    win32gui.SetParent(window, parent_handle)

    # 创建透明层
    hwnd_layered = win32gui.CreateWindowEx(win32con.WS_EX_LAYERED, "STATIC", "", win32con.WS_CHILD | win32con.WS_VISIBLE,
                                           parent_info[0], parent_info[1], parent_info[2] - parent_info[0],
                                           parent_info[3] - parent_info[1], parent, 0, 0, None)
    
    # 设置透明度
    win32gui.SetLayeredWindowAttributes(hwnd_layered, 0, 255, win32con.LWA_ALPHA)

# 示例用法
if __name__ == "__main__":
    # 获取外部D3D窗口的句柄
    d3d_window_handle = win32gui.FindWindow(None, "D3D Window")

    # 获取要置父的窗口句柄
    window_handle = win32gui.FindWindow(None, "Window to be set as parent")

    # 将窗口置父到外部D3D窗口中
    set_parent(window_handle, d3d_window_handle)

请注意,这只是一个示例代码,具体的实现取决于你的应用程序和窗口的类型。你可能需要根据你的实际需求进行修改和调整

python win32 找如何才能将窗口置父到外部的D3D窗口中 正常的办法 置父后 窗口就显示不了了

原文地址: https://www.cveoy.top/t/topic/i0tI 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录