我开发了一个 COM 组件 (dll),它实现了一个显示 WTL 模式对话框的 Edit() 方法。
该 COM 组件的完整接口对应于化学过程工业中使用的软件标准 (CAPE-OPEN),因此该 COM 组件应该可供我无法控制的一系列第 3 方可执行文件使用。
我的组件在许多这些 EXE 中都按预期工作,但特别是其中一个 Edit() 方法只是挂起而没有出现对话框。
::MessageBox()
但是,如果我在对话框显示之前立即调用,DoModal()
并且在首次显示 MessageBox 后行为正确。
我怀疑这个问题可能与这个作为“隐藏窗口应用程序”运行的特定 EXE 有关。
我曾尝试同时使用 NULL 和::GetConsoleWindow()
作为对话框父级的返回值,但都没有奏效。
对话框本身是一个 ATL/WTL CPropertySheetImpl。
有问题的父应用程序(EXE)是我无法控制的,因为它是由(轻度敌对的)第 3 方开发的。
我确实知道我可以::MessageBox()
从我的 COM 组件成功调用或显示标准 Windows 文件对话框,并且在这样做之后我就可以显示我的自定义对话框。如果不先显示“标准”对话框,我将无法显示我的自定义对话框。
谁能建议我如何在不首先显示不必要的 MessageBox 的情况下让它显示对话框?我知道这是可能的,因为我已经看到这个 EXE 显示来自与同一接口对应的其他 COM 组件的对话框。