在什么情况下DirectX不会在句柄传递给CreateDevice()的窗口的子窗口上绘制?

在什么情况下DirectX不会在句柄传递给CreateDevice()的窗口的子窗口上绘制?,directx,overlay,direct3d,Directx,Overlay,Direct3d,DirectX有一个有趣的行为,它不同于Windows实现(DirectX 11)和Linux下的Wine实现 为了确定这是Wine实现中的bug还是程序中的bug,我想知道这种行为的确切记录位置,因为除了“它适用于Windows”之外,我一直找不到任何东西 描述如下:使用DirectX在窗口上绘制时,此窗口的任何可见子窗口似乎都没有被覆盖。例如,以下是DirectX SDK示例中的MeshViewer: (在CreateDevice中的当前参数中,主窗口的句柄作为hDeviceWindow传

DirectX有一个有趣的行为,它不同于Windows实现(DirectX 11)和Linux下的Wine实现

为了确定这是Wine实现中的bug还是程序中的bug,我想知道这种行为的确切记录位置,因为除了“它适用于Windows”之外,我一直找不到任何东西

描述如下:使用DirectX在窗口上绘制时,此窗口的任何可见子窗口似乎都没有被覆盖。例如,以下是DirectX SDK示例中的MeshViewer:

(在
CreateDevice
中的当前参数中,主窗口的句柄作为
hDeviceWindow
传递)工具栏和状态栏在窗口中可见,但在Wine下,它们被DirectX曲面遮挡:

我在另一个应用程序中也观察到了这种行为,该应用程序使用工具栏创建了一个与窗口客户端区域大小相同的DirectX曲面,并依赖DirectX确定要在哪些区域上绘制。有趣的是,工具栏似乎不是每帧都绘制在DirectX曲面上(我在工具栏的绘制处理程序中设置了一个断点),因此我猜测DirectX以某种方式确定了子窗口的位置,而不是一开始就绘制在子窗口上


这是正确的吗?如果是,记录在哪里?

您是否尝试过使用WS_CLIPCHILDREN和WS_ClipSiblings窗口样式?另外,尝试查看窗口的客户端区域的高度是否包括工具栏和状态栏,也许可以尝试使其与您实际希望绘制的区域相等。谢谢Baris,这就成功了。我没有意识到这不是特定于DirectX的,所以我找错了地方…顺便说一句,这确实是一个葡萄酒错误,WS_CLIPCHILDREN在DirectX/OpenGL中不受尊重。再次感谢!