对话框添加自定义消息

(1)新建一个基于对话框的MFC应用程序MessageTest,删除对话框中原有控件。
注:对话框系统预定义的消息,可以在对话框“属性”里找到“消息”页面,如图所示:
在这里插入图片描述
(2)添加2个按钮,设置按钮标题分别为“用SendMessage发送自定义消息”和“用PostMessage发送自定义消息”。

(3)切换到解决方案管理器,打开MessageTestDlg.h文件,在开头添加自定义消息的宏定义:

#define WM_MYMSG WM_USER+101 //定义一个自定义消息

注:WM_USER是系统预定义的宏,这里的101也可以改为其他正整数。

(4)添加消息处理函数,打开MessageTestDlg.h,在类CMessageTestDlg里的DECLARE_MESSAGE_MAP()前面添加一个函数说明:

afx_msg LRESULT OnMyMsg(WPARAM wParam, LPARAM lParam);

注:afx_msg是一个宏,但它是空定义,仅仅表示声明的函数是一个消息响应函数。

打开MessageTestDlg.cpp,在文件末尾添加DoMyMsg函数的实现代码:

LRESULT CMessageTestDlg::OnMyMsg(WPARAM wParam, LPARAM lParam)
{
	AfxMessageBox((CString)(char*)wParam);
	
	return 0;
}

注:把收到的字符串显示出来。类型转换,先转换成char*,再转换成CString类型。

再在END_MESSAGE_MAP()上面添加一行:

ON_MESSAGE(WM_MYMSG, OnMyMsg)

注:ON_MESSAGE是处理自定义消息的宏,把定义的消息WM_MYMSG和定义的消息处理函数OnMyMsg关联起来。

(5)发送消息,双击“用SendMessage发送自定义消息”按钮,添加代码如下:

void CMessageTestDlg::OnBnClickedButton1() //SendMessage方式
{
	// TODO: 在此添加控件通知处理程序代码
	char   szText[] = "Visual C++ 2010开发工具";

	SendMessage(WM_MYMSG, (UINT)szText, 0);
}

再为另外一个按钮添加处理函数,代码如下:

void CMessageTestDlg::OnBnClickedButton2() //PostMessage方式
{
	// TODO: 在此添加控件通知处理程序代码
	char   szText[] = "Microsoft Visual Studio 2010开发工具";

	PostMessage(WM_MYMSG, (UINT)szText, 0);
}

(6)保存工程并运行,分别单击2个按钮,结果如下图所示:
在这里插入图片描述
在这里插入图片描述
发现SendMessage发出消息后弹出的消息框上的字符串就是参数里面所传的,而PostMessage发出消息后弹出的消息框上为空。这是因为szText是局部变量,它所拥有的字符串在函数OnBnClickedButton1或OnBnClickedButton2执行完毕后会自动释放,即PostMessage发出消息后立即返回,OnBnClickedButton2马上执行完毕导致OnBnClickedButton2中szText马上释放了。SendMessage会等到消息处理函数执行完毕后才返回。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值