窗口大小调整捕获

5

我将尝试为您翻译关于IT技术的内容,以下是需要翻译的内容:

当窗口大小改变时,我想调整图形设备缓冲区的大小,但是我无法检测到这个事件。

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

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


请问您可以发布完整的代码吗? - Phani Rithvij
2个回答

3

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


我拥有DX的所有样本。当我阅读MSDN时,它并不清楚,所以我认为我应该替换翻译消息部分。 - Nyaarium

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

我没有意识到有一个开关可供我们添加。我在错误的函数中。谢谢你们两个。 - Nyaarium
顺便问一下,在消息循环中我能做什么有用的事情? - Nyaarium
打印消息并退出。游戏和全屏图形应用程序也可以在循环中进行渲染。 - Deanna
@PhaniRithvij 你应该阅读一本入门级的Windows编程书籍,以解释窗口过程和消息循环等概念。 - Raymond Chen
@PhaniRithvij,请提出一个单独的问题,而不是试图劫持现有问题。 - Raymond Chen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接