欢迎来到山村网

vc中使用SendMessage自定义消息函数

2019-03-02 14:29:08浏览:970 来源:山村网   
核心摘要:  这篇文章主要介绍了vc中使用SendMessage自定义消息函数的相关资料,需要的朋友可以参考下  SendMessage的基本结构如下: 

  这篇文章主要介绍了vc中使用SendMessage自定义消息函数的相关资料,需要的朋友可以参考下

  SendMessage的基本结构如下:

  ?

1 2 3 4 5 6 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;

  例如可以用以下语句:

  ?

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

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

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

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

  ?

1 #define WM_MY_DOSOME WM_USER+1 // do something

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

  ?

1 #define WM_DOOTHER WM_USER+2 // do other

  表示要做一些事情。

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

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

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

  一:编写一个事情:

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

  ?

1 2 3 4 5 6 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;

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

  我们在

  ?

1 2 3 4 5 6 //{{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,因为还没有用到很复杂的情况,

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

  在头文件里

  复制代码 代码如下:

  #define WM_MYMSG WM_USER+5 //自定义一个消息

  afx_msg void onMyMessage(WPARAM wParam, LPARAM lParam); //自定义消息的处理函数声明

  在.cpp文件里

  ON_MESSAGE(WM_MYMSG, OnMyMessage)

  //利用ON_MESSAGE()宏在自定义消息与其处理函数间建立映射关系

  void CModelessDlg::onMyMessage(WPARAM wParam, LPARAM lParam)

  //从lParam中取出CString对象的指针,并将字符串内容在IDC_MSGEDIT中显示出来

  以上所述就是本文的全部内容了,希望大家能够喜欢。

(责任编辑:豆豆)
下一篇:

C#用匿名方法定义委托的实现方法

上一篇:

全面解析C#中的异步编程

  • 信息二维码

    手机看新闻

  • 分享到
打赏
免责声明
• 
本文仅代表作者个人观点,本站未对其内容进行核实,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们 xfptx@outlook.com