说明:这个函数很重要.很多场合,都是这个函数解决的问题,上次提到过AfxMessage调试之宝,这是继上次之后的又一重要函数
BOOL PostMessage( UINT message, WPARAM wParam = 0, LPARAM lParam = 0 );
介绍用法:摘自孙鑫<<VC++深入详解>>书上
头文件:
宏定义(如果添加新的宏话,就+1,比如第1次用+1,第2次用+2.依此类推)-------->
#define WM_AD WM_USER+101
/*********修正:标准是100以上(100以下是供系统使用),以前WM_USER+1,没错,但是不规范,在此更正********/
映射函数 ---->
afx_msg void OnAd(WPARAM wParam,LPARAM lParam);
源文件:
映射函数(注意最后没有分号之类)----->
ON_MESSAGE(WM_AD,OnAd)
响应的映射函数--->
void CMyDlg::OnAd(WPARAM wParam,LPARAM lParam)
{
}
备注:如果窗口是当前窗口的话,参数1是宏(即WM_Ad之类),参数2与3是消息参数
-----------------------下面VS2010版(注:VC6.0以前的格式在VS2010下不能在使用了)--------------------------
第1步:VS2010已经为我们建好了模式(不要选已注册),创建完成后框架就自动全出来了,只差1步---->如图所示
第2步:定义标识符即可---->
#define PostMessage_fun WM_USER+101
完成!
------------------------详细讲解区:-------------------------
申明:在VS2010创建自定义函数非常简单,比VC6.0快速简单,上面2步已介绍,详细讲解区,主要是介绍2者区别,以及引用计时器做参照物,分别说明了未注册与已注册的自定义函数,当然此处重点讲解未注册的自定义函数(ON_MESSAGE),至于已注册的自定义函数(ON_REGISTERED_MESSAGE),目前用不上,用的上的时候在来更新了
--->头文件格式:
afx_msg void OnTimer(UINT_PTR nIDEvent);//这个是计时器格式
protected:
afx_msg LRESULT OnPostmessageFun(WPARAM wParam, LPARAM lParam);//这个是未注册的自定义函数格式
afx_msg LRESULT OnPostmessageFun1(WPARAM wParam, LPARAM lParam);//这个是已注册的自定义函数格式
--->源文件格式(宏响应区):
// ON_MESSAGE(WM_AD,OnAd)//注:这个是VC6.0的格式
// ON_MESSAGE(WM_AD,&CPostMessage自定义函数创建Dlg::OnAd)//注:这个是VS2010的格式
ON_WM_TIMER()//注:这个是计时器的格式
ON_MESSAGE(PostMessage_fun, &CPostMessage自定义函数创建Dlg::OnPostmessageFun)//注:这个是VS2010未注册的自定义函数格式
ON_REGISTERED_MESSAGE(PostMessage_fun1, &CPostMessage自定义函数创建Dlg::OnPostmessageFun1)//注:这个是已注册的自定义函数格式
//注:自定义函数参数1:未注册的要自己定义.已注册的用不上.暂待
END_MESSAGE_MAP()
---->源文件格式(函数区)
void CPostMessage自定义函数创建Dlg::OnBnClickedButton1()//这个是响应按钮
{
PostMessage(PostMessage_fun1);
}
void CPostMessage自定义函数创建Dlg::OnTimer(UINT_PTR nIDEvent)//这个是计时器函数
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnTimer(nIDEvent);
}
/*
void CPostMessage自定义函数创建Dlg::OnAd(WPARAM wParam,LPARAM lParam)//这个是VC6.0版的自定义函数.用在VS2010则错误
{
}
*/
afx_msg LRESULT CPostMessage自定义函数创建Dlg::OnPostmessageFun(WPARAM wParam, LPARAM lParam)//是VS2010未注册的版本,正确
{
AfxMessageBox("测试未注册的自定义函数成功!");
return 0;
}
-------------------------------------------