转载地址: http://blog.sina.com.cn/s/blog_4a1695ff0100ckgo.html

 

首先弄清楚两点:

(1)谁要发送这个消息(2)谁要接受这个消息。  

用一个简单的例子来说明。对象A向B(也可以就是A到A)发送消息。  

1 发送消息  

首先在A的头文件中定义这个消息:  

  #define WM_USERMESSAGE WM_USER+30  

   所有自定义消息都是以WM_USER消息为基础加上一个任意的自然数来表示的。A是向外发送消息的对象,因此在A的某个方法(函数)里就会调用用来发消 息的函数B::SendMessage()/B::PostMessage(),因为是B接受消息,因此是如上的形式。  

2 接受消息  

  对象接受一个消息,应该有三部分:在头文件中有该消息的处理函数的原型;在实现文件中有接受消息映射的宏; 以及该消息的处理函数的具体实现。  

2.1 头文件中加上自定义消息的处理函数原型  

  在DECLARE_MESSAGE_MAP()语句之前,一对AFX_MSG之间加上如下形式的函数原型:

  afx_msg LRESULT OnProcName( WPARAM wParam, LPARAM lParam );  

  对Win32来说,wParam, lParam是传递消息最常用的手段。  

2.2 在实现文件中加上接受消息映射的宏  

  在cpp文件里,BEGIN_MESSAGE_MAP语句之后,在一对AFX_MSG_MAP之间,增加 如下形式的代码: 

  ON_MESSAGE(WM_USERMESSAGE, OnProcName)  

上面是不用分号结尾的。
  

2.3 在实现文件中给出消息处理函数的具体实现。



发信人: Amia (小羊·橘子·和中南海有缘), 信区: VisualC
标  
OnTest()函数中添加代码
void CMainFrame::OnTest()
{
TestDialog dialog;
dialog.DoModal();
}  
 
  运行程序,在测试菜单打开对话框,点击测试按钮即可看到结果。

相关文章:

  • 2021-10-26
  • 2022-12-23
  • 2022-02-07
  • 2022-12-23
  • 2021-10-07
  • 2021-08-08
  • 2022-12-23
  • 2021-07-24
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-31
  • 2022-12-23
相关资源
相似解决方案