C# 为什么可以';我不能以MDI形式打开外部应用程序吗?

C# 为什么可以';我不能以MDI形式打开外部应用程序吗?,c#,mdi,C#,Mdi,当我作为MDI子级打开外部应用程序时,该应用程序将打开,但不会作为MDI子级打开。我有一个类可以正确运行notepad.exe,但它不能与我自己的应用程序一起工作: public class ExternalApp { [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] private static extern uint SetParent(IntPtr hWndChild,

当我作为MDI子级打开外部应用程序时,该应用程序将打开,但不会作为MDI子级打开。我有一个类可以正确运行notepad.exe,但它不能与我自己的应用程序一起工作:

public class ExternalApp {
    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)]
    private static extern uint SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    public static void LoadProcessInControl(string app_path, Control parent) {
        System.Diagnostics.Process p = System.Diagnostics.Process.Start(app_path);
        p.WaitForInputIdle();
        ExternalApp.SetParent(p.MainWindowHandle, parent.Handle);
    }
}
我使用以下命令调用函数:

ExternalApp.LoadProcessInControl(@"C:\Users\Bálint\Documents\Visual Studio 2013\Projects\TesztApp\TesztApp.exe", this);

有什么问题吗?

事实上,我的评论错了,这些属性不需要设置。已经有一段时间了为此,我成功地在子窗体中使用了一个面板:

public partial class Form2 : Form
{
    [DllImport("user32.dll", SetLastError = true)]
    private static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent);
    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
    static extern IntPtr SendMessage(IntPtr hWnd, Int32 Msg, Int32 wParam, Int32 lParam);
    public Form2()
    {
        InitializeComponent();
        Process process = new Process();
        process.StartInfo.FileName = "Notepad.exe";
        process.Start();
        process.WaitForInputIdle();
        SetParent(process.MainWindowHandle, panel1.Handle);
        //This maximizes the process window. 
        SendMessage(process.MainWindowHandle, 274, 61488, 0);
        return;
    }
}
SendMessage的文档是。 子窗体如下所示,其中嵌入了记事本:

public Form1()
{
    InitializeComponent();
    Form2 newForm2 = new Form2();
    newForm2.MdiParent = this;
    newForm2.Show();
}

问题在于记事本窗口的样式不正确(它不是MDI子窗口,而是顶级窗口)。你不能强迫一个窗口变成它不是的东西,就像你可以强迫你的金鱼变成一个包裹一样,只要把又大又重的包裹绑在它的背上。@mbalint987我基本上和你一样,用Notepad.exe作为加载它的应用程序,Notepad看起来像个孩子-太好了,但我有另一个我创建的应用程序(不是记事本或计算器)这只是正常加载,但不是作为一个孩子-你解决了这个问题吗?你怎么能得到这个参数?27461488,0@mbalint987-我为SendMessage添加了指向文档页面的链接。