我正在开发基于Win32 DialogBox的应用程序。这使用DialogBox()创建对话框,并具有执行所有常规操作的对话框过程。
该对话框上有一些静态文本控件,通常我是通过对话框过程中的SendDlgItemMessage()在其中显示文本的。
但是,对话框在某一时刻启动了冗长的操作。此操作有一个带有一系列状态消息的回调。由于两个原因,我在对话框上显示这些消息时遇到了一些麻烦:
编辑我已经使用SendDlgItemMessage()将WM_SETTEXT发送到对话框上的静态文本控件进行了一些调查。即使对话框过程被阻止,文本也会立即显示。
最佳答案
好吧,您的对话框HWND是单例,所以它不是世界末日。但是,是的,完成此操作的标准方法是将不透明的指针传递给完成任务的代码。例如,与EnumWindows()的lParam参数进行比较,回调会将指针返回。
控件是否立即重绘自身是实现细节。我只知道进度栏正在这样做。您可以在对话框窗口句柄上调用UpdateWindow,以将所有待处理的绘画更新刷新到屏幕上。
全方位更好的鼠标陷阱是在辅助线程上执行长时间运行的任务。避免Windows显示“无响应”幻影窗口,避免广播消息超时和许多潜在的死锁问题。但是正确起来往往比较棘手,您不能直接从辅助线程中更新窗口。
关于c++ - Win32 DialogBox应用程序:如何在DialogBox上显示来自回调的文本?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3212925/