Winapi 当父级全屏显示且具有焦点时,子级不可见

Winapi 当父级全屏显示且具有焦点时,子级不可见,winapi,parent-child,fullscreen,Winapi,Parent Child,Fullscreen,使用双缓冲窗口时,我遇到一个问题,即当我使父窗口全屏时(仅使用覆盖整个屏幕,或使用带有CDS\U全屏的ChangeDisplaySettings都显示问题),它的任何子窗口都不会绘制/可见。但是,只有当窗口具有焦点/是活动窗口时,才会发生这种情况。很长一段时间(2年多)以来,我一直在努力解决这个问题,最终我开始足够关心并尝试解决这个问题 具体设置: 这是一个OpenGL窗口,双缓冲 在绘制子对象之前绘制父对象,并且两者都接收WM_PAINT消息 绘图是在WM_PAINT BeginPaint/

使用双缓冲窗口时,我遇到一个问题,即当我使父窗口全屏时(仅使用覆盖整个屏幕,或使用带有CDS\U全屏的ChangeDisplaySettings都显示问题),它的任何子窗口都不会绘制/可见。但是,只有当窗口具有焦点/是活动窗口时,才会发生这种情况。很长一段时间(2年多)以来,我一直在努力解决这个问题,最终我开始足够关心并尝试解决这个问题

具体设置:

  • 这是一个OpenGL窗口,双缓冲
  • 在绘制子对象之前绘制父对象,并且两者都接收WM_PAINT消息
  • 绘图是在WM_PAINT BeginPaint/EndPaint对之外完成的,只需将窗口的设备上下文设置为当前绘图即可。然而,旧版本的代码确实将所有绘图限制在Begin-/EndPaint内部,我也遇到了同样的问题
  • 全屏显示时的父窗口样式,如WinSpy++(与我在代码中的要求一致):WS_OVERLAPPEDWINDOW、WS_VISIBLE、WSClipSplings、WS_CLIPCHILDREN(虽然标题已删除且确实不存在,WinSpy似乎未显示此内容),无活动WS_EX样式
  • 子窗口:WS_-Child,WS_-VISIBLE,wsclipSplings,WS_-CLIPCHILDREN,无WS_-EX
  • 代码处理WM_SETFOCUS:DefWindowProc()用于my window proc的返回值,SetActiveWindow(),UpdateWindow()
  • 代码处理WM_KILLFOCUS:仅DefWindowProc()用于my window proc的返回值
  • WM_ACTIVATE被传递给DefWindowProc()
  • 我至少在Windows7和Windows8上看到过这个问题,MSVC和WindowsSDK有不同的版本
  • 我还可以添加其他信息吗

最后,这与的代码有关,如果您希望看到问题的实际情况,请尝试svn trunk中的resizer演示。开始演示后,按c键打开一个子窗口,然后按f键使其全屏显示。

下载2.8.1 tarball并构建freeglut和Resizer项目后,我必须说我无法重现您的问题。我可以打开/关闭全屏显示的子窗口。在这两个项目中,只有自定义项切换到平台工具集v100。@GuntherVanButsele,谢谢您的试用。我在2.8.1版本中已经遇到了这些问题,但是你介意试用目前只在2.8.1版本中的3.0吗?