C#消息的传递处理

消息传递的总结处理:
0.标识: public const int USER = 0x500;
public const int MYMESSAGE = USER + 1;

  1. IntPtr handle //定义窗体应用句柄
    //调用方法:用来传递消息的时候指定需要处理消息的窗体

2.定义一个结构体(用于携带消息的类) (实际中可能是传递消息的实体:这个需要后面传递处理)
public struct My_lParam
{
public int i;
public string s;
}

3.定义发送消息的方法:

[DllImport(“User32.dll”, EntryPoint = “SendMessage”)]
private static extern int SendMessage(
IntPtr hWnd, // 信息发往的窗口的句柄
int Msg, // 消息ID (用于作标识)
int wParam, // 参数1
ref My_lParam lParam
);

4.定义查找类或者窗体的方法:
[DllImport(“User32.dll”, EntryPoint = “FindWindow”)]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
//第一个参数是查找类,第二个参数是根据窗体名查找窗体

5.以上涉及到的方法调用实例:

IntPtr ptr = FindWindow(null, “Form2”);//获取接收消息的窗体句柄
//消息构建(携带消息的实体)
My_lParam m = new My_lParam();
m.s = textBox1.Text;
m.i = m.s.Length;

//窗体、标识、参数1、携带消息的实体
SendMessage(ptr, MYMESSAGE, 1, ref m);//发送消息

6.接收需要处理的消息(接收消息的窗体界面):

protected override void DefWndProc(ref Message m) //WndProc   //DefWndProc
    {
       
        switch (m.Msg)
        {
            case MYMESSAGE:
                Form3.My_lParam ml = new Form3.My_lParam();
                Type t = ml.GetType();
                ml = (Form3.My_lParam)m.GetLParam(t);
                label1.Text = ml.s;
                MessageBox.Show("实现了数据的调用" + t);///显示一个消息框 
                break;

            default:
                base.DefWndProc(ref m);  //DefWndProc(ref m)
                break;

        }
    }

7.PostMessage只负责将消息放到消息队列中,不确定何时及是否处理
SendMessage要等到受到消息处理的返回码(DWord类型)后才继续
PostMessage执行后马上返回
SendMessage必须等到消息被处理后才会返回。


8.class ABC
{
public string ret { get; internal set; }
public string msg { get; internal set; }
public T data { get; internal set; }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值