zoukankan      html  css  js  c++  java
  • [转]VC传递消息sendmessage

    SendMessage的基本结构如下:

    SendMessage(

        HWND hWnd,  //消息传递的目标窗口或线程的句柄。

        UINT Msg, //消息类别(这里可以是一些系统消息,也可以是自己定义,下文具体介绍,)

        WPARAM wParam, //参数1 (WPARAM 其实是与UINT是同种类型的,

      //在vc编译器中右键有个“转到WPARAM的定义”的选项可以查看。

        LPARAM lParam); //参数2

    其中一些参数的由来如下:

    //typedef unsigned int UINT;

    //typedef UINT WPARAM;

    //typedef LONG LPARAM;

    //typedef LONG LRESULT;

    例如可以用以下语句:

    ::SendMessage(this->m_hWnd, WM_MY_DOSOME, (WPARAM) 0, (LPARAM) 0);

    这里我发送的消息是本窗体接收的,所以句柄用:this->m_hWnd

    这里的消息类别WM_MY_DOSOME就是我自定义的,

    在接收消息的窗体或线程所在的头文件里:

    #define WM_MY_DOSOME WM_USER+1 // do something

    当然你还可以定义更多如:

    #define WM_DOOTHER WM_USER+2 // do other

    表示要做一些事情。

    到这里,可能大家还是对消息类别有点模糊,不要担心,我下面很快就讲到。

    我们发了一个消息出去,那么接收方要能识别这个消息是干什么,就是通过消息类别来区分,

    并且开始去做这个消息对应要处理的事情。如下:

    一:编写一个事情:

    我们在接收窗体里定义一个这样的事情(过程),

    afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)

    {

     MessageBox("收到消息了,我要开始做一些事情了。","收到",MB_OK);

     //可以运用iParam1,iParam2 来做一些事情。

     return 0;

    }

    这个事情有3点大家要注意,非常重要:

    1:使用了afx_msg,并且要将afx_msg LRESULT DoSomeThing(WPARAM iParam1,LPARAM iParam2)

    改写到头文件的 

    //{{AFX_MSG

    //。。。改写到这里,颜色会变成灰的。这一点非常重要。

    //}}AFX_MSG

    2:参数有2个,WPARAM iParam1,LPARAM iParam2,哪怕没有东西传进来也要写,不然会吃苦头的,vc里不会提醒你少写了一个,

    但一些莫名奇妙的事情会发生。

    3:类型用 LRESULT,完了要return 0;

    二:让接收方知道什么时候做这个事情:

    我们在

    //{{AFX_MSG_MAP

    //。。。这里写上

    ON_MESSAGE(WM_MY_DOSOME,DoSomeThing)

    //如果还有其他消息就再写一个

    ON_MESSAGE(WM_DOOTHER,DoOther)

    //}}AFX_MSG_MAP

    到这里,当你用SendMessage,发了一个WM_MY_DOSOME类型的消息过来的时候,

    接收方就会去做DoSomeThing(WPARAM iParam1,LPARAM iParam2)

    发了一个WM_DOOTHER类型的消息过来的时候,

    接收方就会去做DoOther(WPARAM iParam1,LPARAM iParam2)当然,这里DoOther我还没有定义,

    这样就是一个完整的消息发送与接受过程,我没有详细讲参数,iParam1,因为还没有用到很复杂的情况,

    大家要是有心得我们可以一起提高。

     

    VC传递消息sendmessage - fengqing888 - fengqing888的博客在头文件里

    VC传递消息sendmessage - fengqing888 - fengqing888的博客#define WM_MYMSG  WM_USER+5 //自定义一个消息

    VC传递消息sendmessage - fengqing888 - fengqing888的博客afx_msg void OnMyMessage(WPARAM wParam, LPARAM lParam); //自定义消息的处理函数声明

    VC传递消息sendmessage - fengqing888 - fengqing888的博客在.cpp文件里

    VC传递消息sendmessage - fengqing888 - fengqing888的博客ON_MESSAGE(WM_MYMSG, OnMyMessage)

    VC传递消息sendmessage - fengqing888 - fengqing888的博客//利用ON_MESSAGE()宏在自定义消息与其处理函数间建立映射关系

    VC传递消息sendmessage - fengqing888 - fengqing888的博客void CModelessDlg::OnMyMessage(WPARAM wParam, LPARAM lParam)

    VC传递消息sendmessage - fengqing888 - fengqing888的博客//从lParam中取出CString对象的指针,并将字符串内容在IDC_MSGEDIT中显示出来

    VC传递消息sendmessage - fengqing888 - fengqing888的博客{

    VC传递消息sendmessage - fengqing888 - fengqing888的博客 CString *str;

    VC传递消息sendmessage - fengqing888 - fengqing888的博客  str=(CString *)lParam;

    VC传递消息sendmessage - fengqing888 - fengqing888的博客   SetDlgItemText(IDC_EDIT,*str);

    VC传递消息sendmessage - fengqing888 - fengqing888的博客}

    VC传递消息sendmessage - fengqing888 - fengqing888的博客

    VC传递消息sendmessage - fengqing888 - fengqing888的博客按下按钮发送消息

    VC传递消息sendmessage - fengqing888 - fengqing888的博客void CModelessDlg::OnMsgBTN() 

    VC传递消息sendmessage - fengqing888 - fengqing888的博客{

    VC传递消息sendmessage - fengqing888 - fengqing888的博客 CString str= "自定义消息被触发了!";

    VC传递消息sendmessage - fengqing888 - fengqing888的博客SendMessage(WM_MYMSG, 0, (LPARAM) &str);

    VC传递消息sendmessage - fengqing888 - fengqing888的博客 //给ModelessDlg自己发一个自定义的消息

    VC传递消息sendmessage - fengqing888 - fengqing888的博客}

  • 相关阅读:
    爬虫笔记1
    python逐行读取文件&作成xml文件
    C#.NET自定义下拉框实现选中下拉list的值和显示框内的值不同
    Mongodb笔记
    tomcat启动脚本
    mysql相关函数
    关于SQL_Errno1677导致主从复制中断处理
    mysql慢查询日志切换
    mysql5.7 忘记root密码处理
    Python零基础入门(4)-------简单了解Python是怎么运行
  • 原文地址:https://www.cnblogs.com/skykang/p/3502351.html
Copyright © 2011-2022 走看看