在两个单独的Win32进程中使用模式对话框将程序UI嵌入到另一个UI中

时间:2013-04-01 17:08:49

标签: delphi

我需要将辅助应用程序的用户界面(UI)嵌入到主应用程序中。我可以使用SetParent轻松地将辅助应用程序主窗体托管到主应用程序中。我正在使用命名管道在两个应用程序之间进行通信。我甚至可以借助主应用程序中的虚拟TEdit在辅助应用程序中使用AttachThreadInput API来解决跳转问题。到目前为止一切都很好。

我无法解决以下问题:辅助应用程序中的任何模态窗体都不会被视为主应用程序的模态,这会造成重大问题。

btw:不要告诉我使用DLL,OCX或ActiveX。我有两个普通的exe文件。

任何帮助/暗示都表示赞赏。

1 个答案:

答案 0 :(得分:5)

模态表单的工作原理如下:

  1. 显示模态表单时,会禁用其owner window
  2. 这样就无法与所有者进行互动。
  3. 当模态窗口关闭时,它会重新启用所有者。
  4. 但是在你的场景中,辅助应用程序中的模态窗口不会禁用主应用程序中的窗口。因此,要解决您的问题,您需要确保您的辅助应用程序可以访问主应用程序,并在显示模式窗体时禁用相应的窗口。

    模态是一个有点棘手的领域。各种不良后果很容易搞错。花了至少10个版本的VCL才能在接近正确的地方处理模态和窗口所有者! Raymond Chen写了很多关于模态的文章,我相信你会发现它们很有用: