【发布时间】:2011-06-07 15:24:34
【问题描述】:
如果我在 Windows7 中按下“显示桌面”按钮,我的程序仍然会认为它没有被最小化,如果我在我的程序聚焦时按下WIN+D,那么我的程序才会捕捉到这个最小化命令。如何检查 100% 确定我的程序是否可见?
这是我的主循环:
while(!done){
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message == WM_QUIT){
done = TRUE;
}else{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}else if(active){
render();
}
}
Edit3:这样好吗?看起来像它的工作:
case WM_WINDOWPOSCHANGED:
{
flags = ((PWINDOWPOS)lParam)->flags;
if((flags & 0x8000) && (flags & SWP_NOCOPYBITS) && (flags & SWP_FRAMECHANGED)){
active = !(flags & SWP_NOACTIVATE);
}
if((flags & 0x1000) && (flags & 0x0800) && (flags & SWP_NOMOVE) && (flags & SWP_NOSIZE)){
active = 1;
}
}
case WM_ACTIVATE:
{
active = !HIWORD(wParam);
return 0;
}
【问题讨论】:
-
隐藏窗口时会擦除什么?
-
@Cody Gray,我不明白你的意思......你能详细说明一下吗?
-
@Cody,问题是如果我按下“显示桌面”按钮,我的程序渲染循环将继续运行......因为它没有告诉我它被隐藏了。
-
@Cody,我使用 openGL 进行渲染,我不明白这与我的问题有什么关系。我故意放了winapi标签:这应该与窗口消息处理有关。我怀疑我的程序与其他程序有什么不同,因为很多人就像我一样只是复制粘贴 nehe 教程。所以……请理解。
-
如果你只是从互联网上“复制粘贴”了一些教程,难怪你会遇到问题。通读 OpenGL 红皮书,让您真正了解程序的功能。
标签: c++ visual-studio-2008 winapi opengl