当子进程退出时,父对话框接收wm_close



我有一种情况,我的C#应用程序在64位机器上运行时使用32位和64位DLL的混合物。我的主要UI必须是64位,一个孩子对话必须是32位。为了解决这个问题,我从64位版本启动了该应用程序的32位版本,然后等待它退出。我使用匿名管道将儿童对话框的结果恢复到64位进程。我将父窗口的句柄传递给子进程,因此来自32位进程的子对话框将是父进程中的主对话框的模态。这很好地工作了,但是问题是,当孩子进程关闭64位进程中的父对话框时,将接收WM_Close消息,并且应用程序存在。在32位进程模式下,在64位进程中的"父"对话框中仍在制作"子"对话框的同时,我该如何防止这种情况?

如果我不通过"父对话框"窗口处理应用程序不会关闭。

我在尝试此尝试时发现了孩子窗口会悬挂。此处的其他帖子表明您无法将对话框的父级设置为对话框。

解决我所做的问题:

  1. 启动子进程之前,请致电EnableWindow(parent,false)
  2. 将主表单手柄传递给命令行上的子进程。
  3. 在子进程中的"子对话"手机
  4. 中,请致电SetWindowlong(儿童,GWL_HWNDPARENT,parent)
  5. Call EnableWindow(父母,true)当子进程结束时

现在一切都很好。