单文档的没问题了。[DllImport("User32.dll", EntryPoint = "SendMessage")]
private static extern int SendMessage(int hWnd, int Msg, int wParam, ref COPYDATASTRUCT lParam);
[DllImport("User32.dll", EntryPoint = "FindWindow")]
private static extern int FindWindow(string lpClassName, string lpWindowName);private void SendMsg(string msg)
{
int WINDOW_HANDLER = FindWindow(null, @"From1");
if (WINDOW_HANDLER == 0)
{
MessageBox.Show("没有找到From1!");
}
else
{
.....
}
}但是多文档的程序,两个子窗口老是提示找不到其中一个From,请问是什么原因?

解决方案 »

  1.   

    C#可以通过窗体的MdiParent.MdiChildren去获取子窗体,不需要调用API吧
      

  2.   

    1) MDI应用程序至少要由两个窗口组成,创建第一个窗口叫做MDI容器,在容器中显示的窗口叫MDI子窗口,我们把MDI窗口既叫做MDI容器,也叫主窗口。
    2) 要创建MDI应用程序,要把应用程序的主窗口从一个窗体改为MDI容器,只需要把窗体的IsMdiContainer属性设置为true即可。
    3) 在MDI应用程序以最基本的模式显示它本身之前,还有两件事要做:a.必须告诉MDI要显示哪个窗口,调用Show()。b.要显示为子窗口的窗体构造函数应与父容器关联,方法是把它的MdiParent属性设为MDI容器的实例。this.MdiParent=parent;
    子窗口的构造函数:
     Public frmChild(MdiBasic.frmContainer parent)  // MdiBasic.frmContainer:应用程序名.父窗体名
         {InitializeComponent();
          this.MdiParent=parent;//将父窗体作为子窗体的Mdiparent
    }
    在父容器的菜单中调用子窗体:
    ws ww=new ws(this);  //ws为子窗口,this:当前窗体,也就是父窗口
    ww.Show();
      

  3.   

    不是不是啊,  我是想让2个子窗体互相SendMessage比如说MDI父窗体是 frmMain
    然后通过frm_A af = new frm_A(this);
    af.MdiParent = this;
    af.Show();frm_B bf = new frm_B(this);
    bf.MdiParent = this;
    bf.Show();的方式生成两个子窗口,现在想在frm_A 和 frm_B之间SendMessage,请问如何实现,有点演示代码更好。
      

  4.   


    IntPtr iHandle;
    foreach (Form form in this.MdiParent.MdiChildren) {
         if (form.Text.Equals("frm_B") == true) {
              iHandle = form.Handle;
         }
    }这样去获取句柄,可以找到
      

  5.   

    FindWindow中窗口句柄只能是父窗口的句柄,所以要通过父窗口来找到子子窗体.