调试与解决困难之宝---PostMessage(WM_AD,0,0);注:分VC6.0版本与VS2010版本介绍

本文详细介绍了 PostMessage 函数在 VC6.0 和 VS2010 中的应用,包括自定义消息 WM_AD 的定义与使用,以及如何在不同环境下创建自定义函数。通过对比两种环境下函数的使用方式,帮助开发者更好地理解和应用此函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

调试与解决困难之宝---PostMessage(WM_AD,0,0);注:分VC6.0版本与VS2010版本介绍

说明:这个函数很重要.很多场合,都是这个函数解决的问题,上次提到过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;
}

-------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值