while(getmessage(&msg,NULL,0,0))
{translatemessage(&msg);
dispatchmessage(&msg);
}
return msg.wparam;
当从消息队列中取得消息时候执行循环体
没有取到呢??????????
就执行return msg.wparam吗????

解决方案 »

  1.   

    int d3d::EnterMsgLoop( bool (*ptr_display)(float timeDelta) )
    {
    MSG msg;
    ::ZeroMemory(&msg, sizeof(MSG)); static float lastTime = (float)timeGetTime();  while(msg.message != WM_QUIT)
    {
    if(::PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
    {
    ::TranslateMessage(&msg);
    ::DispatchMessage(&msg);
    }
    else
            {
    float currTime  = (float)timeGetTime();
    float timeDelta = (currTime - lastTime)*0.001f; ptr_display(timeDelta); lastTime = currTime;
            }
        }
        return msg.wParam;
    }
    这里又如何解释?
      

  2.   

    dispatchmessage 里面很复杂的。里面应该有IDLE处理的。
      

  3.   

    GetMessage函数没有消息会等待的.一直等到有消息为止,所以不会产生读不到消息的问题
      

  4.   

    while(getmessage(&msg,NULL,0,0))
    {translatemessage(&msg);
    dispatchmessage(&msg);
    }
    没有取到消息会调用system idel处理程序,不会占用CPU
    这是个死循环,getmessage 总是返回一个非0值,如果取到消息就用translatemessage做预处理,比如将键盘扫描码转换成虚拟码,dispatchmessage将窗口消息发送到窗口。getmessage只有收到WM_EXIT消息才会返回0,造成消息循环退出,结束进程。