我正在用 C++ 直接应用 WINAPI 编写一个 Windows CE 应用程序。在这个应用程序中,我解析一个文本文件,它可能很大也可能不大,因此可能需要也可能不需要一段时间来加载;由于我将添加通过无线网络加载文件的功能,因此我认为最好添加一个进度条。
我的目标是在模式对话框中显示进度条,从而防止用户与主窗口进行交互。然后创建一个线程在后台执行加载,让主线程更新 GUI。
但是,使用EndDialog()
阻止我返回加载文件的代码,直到对话框关闭。显然我想显示对话框然后加载负载,定期从后台线程更新进度。在这一点上,我只知道有两种方法可以规避这一点:
- 使用 创建对话框
CreateDialog
,修改消息处理程序以容纳指定给对话框的消息,禁用主窗口并最后创建后台线程。 -
创建处于挂起初始状态的后台线程,使用
DialogBoxParam
传递线程 ID 创建对话框,并在捕获WM_INITDIALOG
恢复线程时。
尽管这两个中的任何一个都可能有效(我倾向于第二个选项),但我很好奇这是否是在 Windows 环境中处理进度条的方式——或者是否有更精简、更多聪明的做法。