文档介绍:游戏开发基础(9)
第一节窗口的移动和改变大小时
case WM_SIZE:
case WM_MOVE:
if (IsIconic(hWnd))
{
    Msg("FoxBear is minimized, pausing");
    PauseGame();
}
if (bFullscreen)
{
    SetRect(&rcWindow, 0, 0, GetSystemMetrics(SM_CXSCREEN), GetSystemMetrics(SM_CYSCREEN));
}
else
{
    GetClientRect(hWnd, &rcWindow);
    ClientToScreen(hWnd, (LPPOINT)&rcWindow);
    ClientToScreen(hWnd, (LPPOINT)&rcWindow+1);
}
Msg("WINDOW RECT: [%d,%d,%d,%d]", , , , );
break;
case WM_SIZE:是在窗口的大小被改变时发送的。
case WM_MOVE:是在窗口被移动时发送的。
当收到这两个消息后,首先检测窗口是否最小化了,如果是则暂停游戏。否则再检测游戏是否转为全屏模式,若是则改变用户区的大小为全屏。如果只是改变了窗口的大小但并没有使显示模式变成全屏或窗口最小化,则先取得窗口的用户区坐标(左上角的x、y及右下角的x、y的值)将之存入结构rcWindows,再将rcWindows中的坐标转换为屏幕坐标。请注意rcWindows是RECT型的结构,但ClientToScreen()要求的是POINT型的结构,在结构RECT中存放的是一个矩形的左上角的x、y及右下角的x、y的值而结构POINT中存放的就只是x和y的值。故此在 
ClientToScreen(hWnd, (LPPOINT)&rcWindow);
ClientToScreen(hWnd, (LPPOINT)&rcWindow+1);
中先对rcWindow进行强制类型转换,而且两次调用该函数,同时在第二次掉用时使rcWindow的地址自加1。
第二节窗口被激活时 
case WM_ACTIVATEAPP:
bIsActive = (BOOL)wParam && GetForegroundWindow() == hWnd;
if (bIsActive)
    Msg("FoxBear is active");
else
    Msg("FoxBear is not active");
if (bPaused && bIsActive)
{
    if (RestoreGame())
    {
        UnPauseGame();
    }
    else
    {
        if (GetForegroundWindow() == hWnd)
        {
            if (InitGame())
            {