概述
这里演示的是,在主窗体代码块中,重写拦截信息方法。
首先新建一个类:
这个类名定义为Msg
[DllImport("User32.dll",EntryPoint = "SendMessage")]
private static extern IntPtr SendMessage(int hWnd,int msg,IntPtr wParam,IntPtr IParam);
[DllImport("User32.dll",EntryPoint = "FindWindow")]
//IpClassName表示主窗体的实例名 IpWindowName是主窗体的名字(也就是主窗体的text属性值)
private static extern int FindWindow(string IpClassName,string IpWindowName);
//定义消息变量 这个变量代表这个子类向主窗体发送的“句柄”,通过这个句柄,可以在拦截消息方法中识别是该//类发送给过来的
public const int CUSTOM_MESSAGE = 0X400+2;
//向窗体发送消息的方法
public void SendMsgToMainForm(int msg)
{
int WINDOW_HANDLER = FindWindow(null,"main_form");
if(WINDOW_HANDLER == 0)
{
throw new Exception("Could not find Main Window!");
}
long result = SendMessage(WINDOW_HANDLER,CUSTOM_MESSAGE,new
IntPtr(msg),IntPtr.Zero).ToInt64();
}
在主窗体中重写拦截方法:
//拦截消息方法
protected override void WndProc(ref Message msg)
{
try
{
switch(msg.Msg)
{
case Msg.CUSTOM_MESSAGE://处理自定义消息
//msg.WParam是子类传过来的值
Messagebox.Show(msg.WParam.ToString());
break;
default:
base.WndProc(ref msg);//调用基类方法处理非自定义消息
break;
}
}
catch(Exception ex)
{
LogHelper.Error("处理拦截信息出错!"+ex.Message,new Exception());
}
}
之后把这个拦截方法放在主窗体类的构造函数里即可。
最后
以上就是能干香氛为你收集整理的子类(子窗体)向主窗体发送消息的全部内容,希望文章能够帮你解决子类(子窗体)向主窗体发送消息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复