【发布时间】:2010-07-09 13:20:42
【问题描述】:
我正在开发一个基于 win32 DialogBox 的应用程序。这使用 DialogBox() 来创建对话框,并且有一个对话框过程可以完成所有常见的事情。
对话框上有一些静态文本控件,通常我通过对话框过程中的 SendDlgItemMessage() 在这些控件中显示文本。
然而,DialogBox 有时会启动一个冗长的操作。此操作有一个带有一系列状态消息的回调。我无法在对话框中显示这些消息,原因有两个:
回调函数不知道对话框HWND是什么,因为它是从执行冗长操作的代码中调用的。我想我可以定义一个文件范围的 HWND 变量,并在冗长的操作开始之前从对话框过程中将对话框 HWND 复制到其中。这样,回调函数就可以访问对话框 HWND。但这似乎非常笨拙:有没有更优雅的方法?
在执行冗长的操作时,对话框过程被阻止。这没关系,因为它是一个嵌入式系统。但是,如果我在对话框过程被阻止时发出 SendDlgItemMessage(),Windows 甚至会在对话框中显示文本吗?
编辑 我已经使用 SendDlgItemMessage() 将 WM_SETTEXT 发送到对话框上的静态文本控件进行了一些调查。即使对话框过程被阻止,文本也会立即显示。
【问题讨论】: