VC中自定义消息的处理
2008-03-05 23:21
323 查看
由于在实际的项目中一直没用用过自定义消息完成某功能,所以虽然以前看书了,知道怎么做但是早还给课本了。
今天想实现这样一个功能,查了查资料记录下来。
另外VCbase上有个简单的示例。
开始时要明白windows消息投递有2种方式:
PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都继续执行,而 SendMessage必须等待其他程序处理消息后才继续执行。这两个函数的返回值也不能,PostMessage的返回值表示PostMessage函 数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
1、肯定是定义消息了这个很easy。 #define WM_XXX WM_USER+100 建议从100开始,因为可能有些新的控件用了WM_USER+1
2、在将要处理的对话框类中加入对应的消息响应函数。
在.h 中加入函数声明 afx_msg bool Ondo(WPARAM wp);
然后再.cpp的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP中加入ON_MESSAGE(WM_XXX, Ondo)
最后实现这个函数。
这里需要说明的是如果像上面那样写的话,VC7、8以后的编译器都会报错,好像VC6不会。
错误信息如下:
error C2440: “static_cast” : 无法从“LRESULT (__thiscall Ondo::* )(WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
这里需要这么做:
将函数的返回值修改为LRESULT,同时将参数改为WPARAM,LPARAM 。也就是这么实现
afx_msg LRESULT Ondo(WPARAM wParam, LPARAM lParam);
3,最后在子对话框里必须知道该自定义消息发送到哪个窗口中,如果你在父对话框中采用
DoModal();的话,虽然子窗口的构造函数有参数是父窗口的CWnd,但是它是NULL。所以可以这么做
在子窗口中调this->GetParent();如果有多个子窗口,可以一直掉他的GetParent直到得到该消息的目的窗口。
虽然简单的问题,但是2和3都是我遇到的,解决了2、3程序就顺利的完成了我要实现的功能。
今天想实现这样一个功能,查了查资料记录下来。
另外VCbase上有个简单的示例。
开始时要明白windows消息投递有2种方式:
PostMessage 和SendMessage的区别主要在于是否等待其他程序消息处理。PostMessage只是把消息放入队列,不管其他程序是否处理都继续执行,而 SendMessage必须等待其他程序处理消息后才继续执行。这两个函数的返回值也不能,PostMessage的返回值表示PostMessage函 数执行是否正确,而SendMessage的返回值表示其他程序处理消息后的返回值。
1、肯定是定义消息了这个很easy。 #define WM_XXX WM_USER+100 建议从100开始,因为可能有些新的控件用了WM_USER+1
2、在将要处理的对话框类中加入对应的消息响应函数。
在.h 中加入函数声明 afx_msg bool Ondo(WPARAM wp);
然后再.cpp的BEGIN_MESSAGE_MAP和END_MESSAGE_MAP中加入ON_MESSAGE(WM_XXX, Ondo)
最后实现这个函数。
这里需要说明的是如果像上面那样写的话,VC7、8以后的编译器都会报错,好像VC6不会。
错误信息如下:
error C2440: “static_cast” : 无法从“LRESULT (__thiscall Ondo::* )(WPARAM)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
这里需要这么做:
将函数的返回值修改为LRESULT,同时将参数改为WPARAM,LPARAM 。也就是这么实现
afx_msg LRESULT Ondo(WPARAM wParam, LPARAM lParam);
3,最后在子对话框里必须知道该自定义消息发送到哪个窗口中,如果你在父对话框中采用
DoModal();的话,虽然子窗口的构造函数有参数是父窗口的CWnd,但是它是NULL。所以可以这么做
在子窗口中调this->GetParent();如果有多个子窗口,可以一直掉他的GetParent直到得到该消息的目的窗口。
虽然简单的问题,但是2和3都是我遇到的,解决了2、3程序就顺利的完成了我要实现的功能。
相关文章推荐
- VC++如何处理自定义消息
- VC++如何处理自定义消息
- VC中自定义消息的处理
- VC中自定义消息处理函数的步骤
- VC++如何处理自定义消息
- VC++如何处理自定义消息
- vc自定义消息处理函数与定时器
- VC++自定义消息处理函数2
- vc 添加自定义消息及消息处理函数分5步
- vc自定义消息处理函数与定时器
- VC++对于自定义消息处理
- vc 添加自定义消息及消息处理函数分5步
- vc 添加自定义消息及消息处理函数分5步
- 使用VC如何处理自定义消息
- 用自定义消息在线程间通信(VC)
- 在.net(C# or vb.net)中如何用户自定义消息,并在窗体中处理这些消息
- vc如何自定义消息与在线程中向主窗体控件发送数据
- VC中自定义消息实现
- 用户如何在VC中自定义消息以及响应该消息
- VC中的消息映射和处理