使用 C++ 的 Windows 上的异步对话框

Posted

技术标签:

【中文标题】使用 C++ 的 Windows 上的异步对话框【英文标题】:Assynchronous dialog box on Windows with C++ 【发布时间】:2013-02-20 11:03:50 【问题描述】:

现在我正在开发一个实时软件,但我让自己实现了表单 - 使用 C++Builder 2007 - 用于确认消息(你知道,那些带有 OK 和 Cancel 的对话框,或者只有在出现错误时才 OK ),我读到 Windows MFC 上有一个 DialogBox 类。问题是调用会中断线程,直到在对话框上完成某些输入,我无法承受,因为应用程序上可能正在发生其他事情。

我已阅读有关无模式对话框的信息,但我不确定它是否是我需要的或如何实现。 Windows MFC 上是否有默认的异步对话框,如果有,我该如何调用它?

【问题讨论】:

你应该使用线程。 从不在 main-ui 线程上执行繁重的(cpu 密集型)工作。它是 windows 202(不完全是 101,但仍然很基本) 我应该使用线程来确认消息吗?所以我会在这个新线程而不是主线程上调用对话框,并在它关闭后返回值? msdn.microsoft.com/en-us/library/windows/desktop/… 你想像CWnd::MessageBox那样显示消息框 dccarmo:在 Windows 中,通常以相反的方式处理它:您的“工作”应该在线程上运行,Windows UI 和对话框应该在主线程。虽然任何一种方式都有效。如果您从线程运行 UI,则只需确保从辅助线程执行所有窗口创建、消息泵送等操作。 【参考方案1】:

您不需要线程,您需要无模式对话框...它们最终成为同一调度线程上的窗口。

【讨论】:

基本上不是在堆栈上创建对象并使用DoModal(),而是您new 对象然后自己执行Create

以上是关于使用 C++ 的 Windows 上的异步对话框的主要内容,如果未能解决你的问题,请参考以下文章

使用 C++ 在 Windows 中执行“运行”命令?

屏幕键盘上的 MFC C++ 作为父对话框

C++ 中的哪个 Windows API 将帮助我识别当前 ComboBox 正在使用哪个对话框类?

未收到 C++ Windows 异步 IO 命名管道第一条消息

使用 Windows Hooks 拦截鼠标点击我的应用程序 c++

Windows 异步 RPC C++ MIDL