(WinFrom)MDI多文档程序子窗口之间如何SendMessage?

云海玉弓缘 2009-05-04 02:24:34
单文档的没问题了。

[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,请问是什么原因?
...全文
187 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Homers 2009-05-04
  • 打赏
  • 举报
回复
FindWindow中窗口句柄只能是父窗口的句柄,所以要通过父窗口来找到子子窗体.
缥缈大木头 2009-05-04
  • 打赏
  • 举报
回复

IntPtr iHandle;
foreach (Form form in this.MdiParent.MdiChildren) {
if (form.Text.Equals("frm_B") == true) {
iHandle = form.Handle;
}
}

这样去获取句柄,可以找到
云海玉弓缘 2009-05-04
  • 打赏
  • 举报
回复
不是不是啊, 我是想让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,请问如何实现,有点演示代码更好。
mjjzg 2009-05-04
  • 打赏
  • 举报
回复
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();
zealot1021 2009-05-04
  • 打赏
  • 举报
回复
用委托和事件不行么?
缥缈大木头 2009-05-04
  • 打赏
  • 举报
回复
C#可以通过窗体的MdiParent.MdiChildren去获取子窗体,不需要调用API吧

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧