是否可以使用覆盖wm_nccalcsize的技巧在opengl上绘制整个窗口区域?
我需要保留所有Windows的aero功能(在本例中为win 7),所以我使用(WS_POPUP | WS_SYSMENU | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_THICKFRAME)样式
它适用于最大化模式,我可以通过调整Lparam将边框留在屏幕外。
但是常规窗口周围仍然有8px边框,即使它们应该是客户端rect的一部分(我用GetClientRect()检查了
Image: dark-grey border is visible
这是在我初始化opengl上下文之前完成的。所以我不知道发生了什么。或者如果这甚至可能。我是否应该创建无边界并重新实现所有的航空功能? (我不这样做)
upd 2: 如果我在初始化Opengl上下文之前使用GDI绘制一个rect,这就是我得到的: a nice (0,0,200,200) rect, starting in the nonclient area 所以它是opengl上下文问题。我在msdn docs中看到,opengl只在客户区域中绘制。它仍然这样做,忽略我将客户端rect扩展到整个窗口。 siiiigh。
答案 0 :(得分:1)
将Aero与OpenGL结合使用的常用方法是使用DWM API将窗口客户区设置为零。这允许您使用OpenGL绘制整个窗口(包括标题栏)。我有这个测试程序来修补它作为我的wglarb包装器的一部分:
https://github.com/datenwolf/wglarb/blob/master/test/layered.c
您可能也对我的dwm_load包装器感兴趣,它允许您调用DWM函数而无需将程序与DWM严格链接(这使得它与旧的Windows版本不兼容;您不会相信我经常会得到的“必须运行在WinXP上“作为功能要求”https://github.com/datenwolf/dwm_load