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

fpi*_*tte 3 delphi

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

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

顺便说一句:不要告诉我使用DLL,OCX或ActiveX.我有两个普通的exe文件.

任何帮助/暗示赞赏.

Dav*_*nan 5

模态表单的工作方式如下:

  1. 显示模态窗体时,它会禁用其所有者窗口.
  2. 这具有不可能与所有者进行交互的效果.
  3. 当模态窗口关闭时,它会重新启用所有者.

但在您的场景中,辅助应用程序中的模态窗口不会禁用主应用程序中的窗口.因此,要解决您的问题,您需要确保您的辅助应用程序到达主应用程序并在显示模式窗体时禁用相应的窗口.

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

  • 大卫,你在哪里存储所有这些知识?我很难记住昨天午餐吃的东西. (4认同)