【问题标题】:Catching Window Resize捕捉窗口调整大小
【发布时间】:2012-09-30 10:54:26
【问题描述】:

我正在尝试在调整窗口大小时调整图形设备缓冲区的大小,但我无法检测到该事件。

这是 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();
                }
            }

它没有返回,所以这意味着不正确。捕获调整大小事件的正确方法是什么?

【问题讨论】:

  • 你能发布完整的代码吗?

标签: c++ windows winapi events window


【解决方案1】:

您应该在窗口过程中处理消息,而不是在消息循环中。 PeekMessage 不返回已发送消息,WM_SIZE 是已发送消息。

【讨论】:

  • 我没有意识到有一个开关可供我们添加。我在错误的功能。谢谢你们。
  • 顺便说一句,我可以在消息循环中做些什么有用的事情?
  • 发送消息,然后退出。游戏和全屏图形应用程序也可以在循环中进行渲染。
  • @PhaniRithvij 你应该得到一本介绍性的 Windows 编程书籍来解释窗口过程和消息循环等概念。
  • @PhaniRithvij 请提出一个单独的问题,而不是试图劫持现有的问题。
【解决方案2】:

WM_SIZE 不是在调整大小期间发送到窗口的唯一消息。您需要取消注释对TranslateMessage()DispatchMessage() 的调用,以便处理其他消息。并且您的窗口的 mssage 调度过程需要将未处理的消息传递给DefWindowProc() 以进行默认处理。这些都是你做的吗?

【讨论】:

  • 我拥有 DX 的任何样本。 MSDN 看的时候不太清楚,所以我想我应该替换翻译 msg 部分。
猜你喜欢
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 2019-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多