vc++ 自定义消息和WM_NOTIFY消息实现
来源:互联网 发布:数据库基础是啥 编辑:程序博客网 时间:2024/04/29 22:25
一、在vc++ 里面通过SendMessage可以向窗口发送自定义消息,过程大致如下:
首先定义自定义消息ID
#define MY_MESSAGEID WM_USER+300
然后在消息映射表添加自定义消息映射
ON_MESSAGE(MY_MESSAGEID,MessageFun)
在头文件类里面声明消息响应函数
afx_msg LRESULT MessageFun(WPARAM wparam,LPARAM lparam);
在实现文件里面实现消息响应函数
LRESULT CtestDlg::MessageFun( WPARAM wparam,LPARAM lparam ){MessageBox(_T("ok"));return 0;}
在本例中CtestDlg为主窗体所以在其他窗体发送消息以如下的方式发送;
::SendMessage(AfxGetApp()->m_pMainWnd->m_hWnd,MY_MESSAGEID,0,0);
二、发送WM_NOTIFY消息
WM_NOTIFY主要用于自定义控件发生改变时,对父窗体进行通知
1.首先在父窗体定义消息映射表,如下:
#define MY_NOTIFYMESSAGE WM_USER+500
ON_NOTIFY(MY_NOTIFYMESSAGE,IDC_BUTTON1,NotifyMessageFun)
2.在类里面声明消息响应函数
afx_msg void NotifyMessageFun(NMHDR *nmhdr,LRESULT *result);
3.在cpp文件里面实现该消息响应函数
void CtestDlg::NotifyMessageFun( NMHDR *nmhdr,LRESULT *result ){MyNMHDR *mynhdr=(MyNMHDR*)nmhdr;MessageBox(mynhdr->str);}
4.向父窗体发送消息:
MyNMHDR nhdr;nhdr.nmhdr.code=MY_NOTIFYMESSAGE;nhdr.nmhdr.hwndFrom=GetDlgItem(IDC_BUTTON1)->m_hWnd;nhdr.nmhdr.idFrom=IDC_BUTTON1;strcpy(nhdr.str,"ok");::SendMessage(m_hWnd,WM_NOTIFY,0,LPARAM(&nhdr));
上面的MyNMHDR是自定义的结构体,定义如下
typedef struct{NMHDR nmhdr;char str[20];}MyNMHDR;
如果仅仅是向父窗口发送一个“通知”,那么使用默认的NMHDR结构体就已经够了,NMHDR是系统定义的结构体,定义如下:
typedef struct tagNMHDR{ HWND hwndFrom; UINT_PTR idFrom; UINT code; // NM_ code} NMHDR;
其中hwndFrom表示子控件的HWND,idFrom表示子控件的id,code表示表示消息ID,对应MY_NOTIFYMESSAGE
若需要同时传递一些附加的信息,就需要对NMHDR结构体进行扩充了。使用WM_NOTIFY发送通知的魅力就在于,用户可以根据自己的需要扩充任何附加信息进去。下面就是自定义的NMHDR结构体:
typedef struct{NMHDR nmhdr;char str[20];}MyNMHDR;
这个结构体内包含了NMHDR结构体。这里利用到了C/C++的一个著名的特性:C/C++语言不做内存越界检查。因此,对于自定义的结构体,只要把NMHDR放在第一个元素的地方,就可以安全地把该结构体转型为NMHDR。
- vc++ 自定义消息和WM_NOTIFY消息实现
- 自定义WM_NOTIFY消息
- vc 自定义消息实现
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- WM_NOTIFY消息
- VC中自定义消息实现
- VC中自定义消息实现
- VC中自定义消息实现
- VC中自定义消息实现
- VC中自定义消息实现
- 【VC】中自定义消息实现
- VC中自定义消息实现
- 【VC】中自定义消息实现
- MapReduce之Join操作(4)
- unity 整合 vs2008 加快 unity c# 开发
- Haxe中保存位图为JPG格式
- 2012读书目录
- Oracle中connect by prior .... start with
- vc++ 自定义消息和WM_NOTIFY消息实现
- TCP协议传输的三次握手原理
- 在sharepoint 2010上如何创建一个调查
- 欧盟又盯上中国太阳能玻璃
- Linux脚本(shell)编程(一) 简单入门HelloWorld
- 转换为NSArray后,JSOn响应得到的是空值的解决方案
- 6droom 的新功能
- VC2010操作EXCEL
- Python 数据结构小结