自定义消息的使用实例

1、Windows系统中,系统消息的范围是0到WM_USER - 1 ,WM_USER是一个常量,其值为0x400,

   WM_USER以上的值用于自定义消息;

2、可以简单地用WM_USER加上一个数值定义一个消息ID{说明:消息其实就是一个常量值}

3、使用API函数RegisterWindowMessage可以注册一个系统内唯一的消息ID;

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、

1、建立基于对话框的MFC应用程序UserMsg

//主对话框源文件最开始出添加全局定义
//直接定义的自定义消息
#define WM_MY_DEFINED_MSG (WM_USER + 101)
//注册新消息所用的字符串
#define MY_REGISTERED_MSG_STR _T("MY_MSG_STRING")
//存储新消息的ID的变量
UINT WM_MY_REGISTERED_MSG ;

///主对话框的构造函数添加
	WM_MY_REGISTERED_MSG = RegisterWindowMessage(MY_REGISTERED_MSG_STR);

主对话框上添加一个静态文本控件,其ID为IDC_OUTPUT

将“确定”按钮文本改为“测试新这侧的消息”,响应代码:

void CUserMsgDlg::OnOK() 
{
	// TODO: Add extra validation here
	//投递新注册的消息
	PostMessage(WM_MY_REGISTERED_MSG ,0 , 0);
}

添加按钮ID为IDC_BTN_MYMSG,其文本为“测试自定义消息”

void CUserMsgDlg::OnBtnMymsg() 
{
	// TODO: Add your control notification handler code here
	//投递直接定义的自定义消息
	PostMessage(WM_MY_DEFINED_MSG, 0 ,0);
}

主对话框头文件中添加如下声明:

        afx_msg void OnMyRegisteredMsg();
	afx_msg void OnMyDefinedMsg();
	//}}AFX_MSG

源文件中添加:

void CUserMsgDlg::OnMyRegisteredMsg()
{
	///WM_MY_REGISTERED_MSG消息响应函数
	TCHAR szBuf[128] = {0};
	_stprintf(szBuf, _T("收到了用RegisterWindowMessage注册的消息:WM_MY_REGISTER_MSG ,ID = 0x% X") ,WM_MY_REGISTERED_MSG);
	SetDlgItemText(IDC_OUTPUT ,szBuf);
}
void CUserMsgDlg::OnMyDefinedMsg()
{
	///WM_MY-defined_msg消息响应函数
	TCHAR szBuf[128] = {0};
	_stprintf(szBuf, _T("收到了自定义消息:WM_MY_DEFINED_MSG ,ID = 0x% X") ,WM_MY_DEFINED_MSG);
	SetDlgItemText(IDC_OUTPUT ,szBuf);
}

//}}AFX_MSG_MAP
	ON_MESSAGE(WM_MY_DEFINED_MSG , OnMyDefinedMsg)
	ON_REGISTERED_MESSAGE(WM_MY_REGISTERED_MSG , OnMyRegisteredMsg)



说明:

1、RegisterWindowMessage函数定义的消息可以保证系统内唯一,不同的进程调用该函数,用相同的字符串可以得到相同的ID;

2、自定义消息WM_MY_DEFINED_MSG消息的响应是ON_MESSAGE ,而WM_MY_REGISTERED_MSG响应要用

ON_REGISTERED_MESSAGE宏,否则无法正确响应消息。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值