正文

6.6 自定义消息2007-08-07 14:08:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/sword2008/28284.html

分享到:

http://book.csdn.net/bookfiles/100/1001002870.shtml   6.6 自定义消息  http://book.csdn.net/ 2006-8-24 15:10:00 图书导读 当前章节:6.6 自定义消息 ·6.3 消息处理 ·6.4 归纳整理 ·6.5 重定向消息 ·6.7 小结 ·21.1 实现目标与数据库设计 ·21.2 工程创建 用户可以为了特定的目的而定义自己的消息,这些消息也称为自定义消息。进行自定义消息的方法很简单,一般有两种:一种是利用ON_MESSAGE宏,另外一种就是创建自己的消息映射宏,这一种方法可以定制消息的参数类型,而不像前者只能使用固定的消息参数类型。但是一般情况下不需要定制消息的参数类型,因此这里对此不予介绍。本节主要介绍第一种比较常用的方法。 预定义常量值WM_USER(0x0400)是系统专门用来为实现处理用户自定义的消息而提供的接口,需要自定义消息时,只需要以如下形式定义即可:   WM_USER+X   其中X是一个非负整数值。另外,需要注意的是,用户自定义消息的值范围是有规定的,如6.1.3小节所述,其值介于WM_USER和0x7FFF之间,所以,为X取值时应该注意这个问题。下面结合具体的实例来详细介绍自定义消息的实现方法。 1.自定义消息WM_CUSTOMIZE 首先,在CCDlg类的头文件中加入如下代码:   #define WM_CUSTOMIZE  WM_USER+1   其中WM_CUSTOMIZE即是所要定义的消息。然后,仍在头文件中加入Customize的声明:       // Generated message map functions     //{{AFX_MSG(CCDlg)     afx_msg void OnCmd();     //}}AFX_MSG     afx_msg void Customize(WPARAM wParam, LPARAM lParam);     DECLARE_MESSAGE_MAP()   此时,需要注意的是加入的位置一定要在类向导的“//{{”和“//}}”注释之外,不然类向导会删除开发人员添加的内容。这里所加入的内容即是消息响应函数的声明部分,其中,两个参数分别表示鼠标的屏幕坐标位置。 2.加入消息响应函数实现 在CCDlg类的实现文件中加入消息响应函数的实现部分,代码如下:   void CCDlg::Customize(WPARAM wParam, LPARAM lParam) {       CString strTittle;       strTittle.Format("自定义消息参数:x=%d,y=%d",wParam,lParam);       SetWindowText(strTittle); }   此函数的作用是将鼠标的位置信息显示在对话框的标题栏部分。 3.菜单部分 在主框架的“帮助”主菜单中加入“自定义消息”子菜单,其ID设为ID_CUSTOMIZE,通过类向导响应该命令,函数名默认。其函数体如下:   void CMainFrame::OnCustomize() {       // TODO: Add your command handler code here       POINT pos;       //将消息参数定义为屏幕坐标值       GetCursorPos(&pos);       pdlg->SendMessage(WM_CUSTOMIZE,(UINT)pos.x,pos.y); }   4.文件包含和编译 将CCDlg头文件包含到主框架实现文件中即可,编译运行,可以通过菜单命令响应,注意观察对话标题栏部分的变化。 自定义消息在程序设计中经常用到,但由于实现起来比较简单,这里就不再赘述。   说明 自定义消息的参数内容和返回值都可以定制,根据需要的不同而定制不同的部分。此例中参数的内容为鼠标的坐标。如前所述,如果消息的参数要设计复杂的类型,则可以通过定制消息映射宏来实现。 上一页   首页   下一页

阅读(2118) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册