微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何让对话框后面的窗口重画对话框移动?

在Windows上,当我显示一个对话框(自定义对话框或标准的打开/保存文件对话框),并将对话框移到父窗口上方时,父窗口不会重绘,对话框的后面跟踪为它被拖拽。 (父窗口使用OpenGL绘制,但不确定这是相关的。)如何获取主窗口重绘,因为对话框移动到前面?

我尝试添加一个调用来重绘我的主窗口,每当对话框的callback被发送一条消息,但是这只会导致重绘,只要按下button或者input一个编辑字段就会发生。当对话框的窗口被移动时,它不会重绘。 我如何检测这个动作?

对话框 – select选项

Excel:VBA中的文件打开对话框,设置为详细视图,并按修改datesorting

Windows编程DialogBox背景图片

是否有可能从IFileDialog中删除/隐藏打开的button

如何在Windows XP中打开程序时显示一个对话框?

我怀疑你的opengl应用程序只是使用一个窗口的显式目的通过opengl渲染,然后进入一个严格的循环检查鼠标/ kb输入,然后重绘的opengl表面。 我猜你画的画框后不会抽出信息。 更重要的是,你为窗口设置的那个小存根WndProc可能没有WM_PAINT处理函数

两件事情要考虑。 您的主窗口的WndProc需要捕获WM_PAINT,重绘和验证曲面。 那是….

LRESULT __stdcall YourMainWndProcHandler(HWND hwnd,UINT uMsg,WParaM wParam,LParaM lParam) { switch (uMsg) { ... case WM_PAINT: { PAINTSTRUCT ps; BeginPaint(hwnd,&ps); EndPaint(hwnd,&ps); // redraw your stuff here return 0; } ... } }

而不是调用BeginPaint / EndPaint来处理上面的WM_APINT,你可能会调用ValidateRect。

最好是,您正在捕捉循环中的其他窗口消息。 这样,如果一个窗口被你的应用以外的其他东西遮挡了(例如调整大小,最小化/恢复,其他Windows应用程序需要前景,等等),那么你也可以处理重绘通知

一个典型的游戏试图每个绘图框架泵1消息。

void MainLoop() { MSG msg; if (PeekMessage(&msg,NULL,PM_REMOVE)) { TranslateMessage(&msg); dispatchMessage(&msg); } // your code to simulate and render below DrawScreen(); }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐