Roo*_*kie 3 c++ opengl winapi visual-studio-2008
如果我在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();
}
}
Run Code Online (Sandbox Code Playgroud)
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;
}
Run Code Online (Sandbox Code Playgroud)
当另一个窗口变为活动状态时,发送WM_ACTIVATE。当您说“显示桌面”时,没有其他窗口处于活动状态,因此从技术上讲,即使已将其最小化,您的应用程序仍处于活动状态。
您可能要注意WM_WINDOWPOSCHANGED。您可以查看标志以查看它是什么类型的位置事件,或者只要窗口位置发生更改,就可以检查IsIconic和IsWindowVisible。
有多种潜在功能可以为您提供所需的信息,具体取决于您想要执行的操作:
然而,从您的评论来看,您似乎实际上想查看窗口中是否至少有一个像素在屏幕上实际可见。为此,我可能会使用这个SO问题中提到的技术,使用奇怪命名的GetRandomRgn(),尽管更简单的检查可能是使用GetClipBox()并检查NULLREGION.