2012-10-10 19 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