2012-10-10 50 views
4

我想調整窗口大小時調整圖形設備緩衝區,但我沒有檢測到事件的運氣。捕捉窗口調整大小

這是C++ Windows編程。我試過了:

  while(WM_QUIT != msg.message){ 
       if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){ 
        switch(msg.message){ 
        case WM_SIZE: 
         return; //<-- If the program closes because of this return, then I know I found the right statements. 
        } 
        //TranslateMessage(&msg); 
        //DispatchMessage(&msg); 
       }else{ 
        poly.setConstantBuffer(space.getCamera()); 
        poly.draw(iSize); 

        graphics.render(); 
       } 
      } 

它沒有返回,所以這意味着不正確。捕捉重新調整大小事件的正確方法是什麼?

回答

4

您應該在窗口過程中處理消息,而不是在消息循環中。 PeekMessage不返回發送的消息,並且WM_SIZE是發送的消息。

+0

我沒有意識到有一個開關可供我們添加到。我的功能錯了。謝謝你們。 – RandomClown

+0

在附註上,我可以在消息循環中做什麼有用的事情? – RandomClown

+0

泵消息並退出。遊戲和全屏圖形應用程序也可以在循環中進行渲染。 – Deanna

3

WM_SIZE不是在調整大小期間發送到窗口的唯一消息。您需要解除對TranslateMessage()DispatchMessage()的呼叫,以便處理這些其他消息。並且您的窗口的消息調度過程需要將未處理的消息傳遞給DefWindowProc()以進行默認處理。你在做這些嗎?

+0

我有任何DX的樣品。 MSDN在閱讀時並不清楚,所以我想我會認爲我會替換translate msg部分。 – RandomClown