请教关于Windows消息机制的问题
小弟在做DirectX程序,以下是游戏的循环(其中GameActive是全局变量,是游戏进行的标志)
GameActive = true; // 游戏开始
while(1)
{
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message==WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else if( GameActive )
{
myGame->Reflash();
}
}
消息函数里捕捉
case WM_KILLFOCUS:
GameActive = false;
break;
case WM_SETFOCUS:
GameActive = true;
break;
消息来设定当游戏窗口失去焦点时游戏停止,得到焦点后游戏重新开始
由于游戏是不断刷新画面的,我在刷新的函数加上了
if( GameActive )
{ // 如果当前的游戏在运作的话
GetClientRect( hwnd, &rect );
ClientToScreen( hwnd, (POINT*)&rect );
lpDDSPrimary->BltFast(rect.left, rect.top,lpDDSBack,NULL,NoKey);
}
来设定游戏运行时才刷新
现在在游戏窗口前把一个最小化的程序展开,没有问题;但如果把一个游戏窗口后面一个失去焦点的窗口提前到游戏窗口前时,则游戏程序会在改窗口上绘制一次画面,遮住改窗口的一些东西(但可以正常使用);另外如果QQ的选单申出来时,也会有上面的错误,请问这是为什么?
PS:本来想在游戏版提问,但那里的人气太少了