将其他的应用程序窗体嵌入winform窗体网上的资料很多,可以嵌入记事本,world,excel等,
但将一个自己写的应用程序窗体嵌入就不行了,请高手指点一下

解决方案 »

  1.   

    难道Form不能算一个容器吗?用什么无所谓,重点是怎样嵌入
      

  2.   

            [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public extern static IntPtr SetParent(IntPtr hChild, IntPtr hParent);
    这个可以.
      

  3.   


                frm = new Form7();
                frm.TopLevel = false;
                this.panel1.Controls.Add(frm);
                frm.Show();
      

  4.   

    可以通过 IntPtr hWnd 窗口句柄
    楼主不妨找找
      

  5.   

    这个我试过了,不能将winform窗体嵌入,其它的窗体还可以
      

  6.   

    这种方法我试过了,其它的窗体还可以,就是winform窗体不行
      

  7.   

    你说的这个方法不适用于自己写的程序,会不会是因为自己这个程序是运行于.net下面,调用上面的api的时候,没有传进去正确的参数呢?如child程序的句柄
      

  8.   

    试了一下4楼的方法,对于下面三种情况是可以的:
    非托管-->非托管
    托管-->非托管
    非托管-->托管但是如果两个进程都是托管程序,则出现“内存不足”的异常。
      

  9.   

    An application can use the SetParent function to set the parent window of a pop-up, overlapped, or child window. The new parent window and the child window must belong to the same application. 
    MSDN的原话.
      

  10.   

    至于嵌入的word,excel那些应该属于ole吧...
      

  11.   

    .NET WinForm 不支持Ole,这是MSDN上说的,所以楼主要的功能很难实现 
      

  12.   

    EXCEL WORD 可以使用控件web浏览器
    WebBrowser..但是嵌入另一个成应程序的Form 就没了解过
      

  13.   

    因为你传入API的窗口句柄不是你要的那个窗口句柄。
    把 Main() 写到你那个窗口类中,就可以了。我记得是这样的,以前试过。
      

  14.   

     [DllImport("user32.dll", CharSet = CharSet.Auto)]
            public extern static IntPtr SetParent(IntPtr hChild, IntPtr hParent);
            [DllImport("user32.dll", EntryPoint = "FindWindow")]
            private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);        public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                IntPtr hwnd = FindWindow(null, "ceshi");
                if (hwnd != IntPtr.Zero)
                {
                    SetParent(hwnd, panel2.Handle);
                }
            }经过亲自测试两个程序都是vs2008编写的winform,可以的。测试环境:vs2008
      

  15.   


    都一年多14个月了。使用《Csdn收音机》截图功能,轻松制作图文并茂的文章!
      

  16.   

    可以另起一个进程去运行窗体,并附上一些所运行着窗体需要的资源
    另外你还要写一些保持同步的代码
    我理解,当前的运行消息队列,与你要运行窗体的消息队列无法相互操作
    work,notepad 微软自己做了这些工作(相互通信,保持消息同步)
      

  17.   

    Process去启动另一个程序,可以正确获取到这个程序的句柄
      

  18.   

       可用  但必须注意获取的窗口是有程序启动的  否则会挂掉  至少在win7下  估计是权限问题