方法1:
首先定义自定义消息ID,后面是一个常数。小于WM_USER的都是微软自定义的,自己定义的要比这个数大。
#define WM_MY_DEFINED_MSG (WM_USER+101)
要处理这个消息,首先建立消息映射:
ON_MESSAGE(WM_MY_DEFINED_MSG,&CDEMO12Dlg::OnMyDefinedMsg)
其中CDEMO12Dlg::OnMyDefinedMsg是指定的消息映射函数
在头文件里声明消息映射函数:
afx_msg LRESULT OnMyDefinedMsg(WPARAM wParam ,LPARAM lParam);
然后在cpp里面写这个函数的定义:
LRESULT CDEMO12Dlg::OnMyDefinedMsg(WPARAM wParam ,LPARAM lParam)
{
TCHAR szBuf[128]={0};
_stprintf(szBuf,_T("收到自定义消息:ID=0x%X."),WM_MY_DEFINED_MSG);
SetDlgItemText(IDC_OUTPUT,szBuf);
return 0;
}
再写按钮函数,其意义是当点击按钮的时候,发送自己定义的消息,就是在静态文本框中显示字符串:
void CDEMO12Dlg::OnBnClickedButton3()
{
// TODO: 在此添加控件通知处理程序代码
PostMessage(WM_MY_DEFINED_MSG,0,0);
}
方法2:首先定义一个字符串常量,然后用消息注册函数去注册,会返回一个ID
#define MY_REGISTERED_MSG_STR _T("MY_MSG_STRING")
UINT WM_MY_REGISTERED_MSG;
在构造函数里添加注册windows消息函数注册字符串,就会得到这个ID,这个ID用WM_MY_REGISTERED_MSG来接受。
WM_MY_REGISTERED_MSG在上述定义
CDEMO12Dlg::CDEMO12Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CDEMO12Dlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
WM_MY_REGISTERED_MSG=RegisterWindowMessage(MY_REGISTERED_MSG_STR);
}
添加消息映射:
ON_REGISTERED_MESSAGE(WM_MY_REGISTERED_MSG,&CDEMO12Dlg::OnMyRegisteredMsg)
头文件中声明:
afx_msg LRESULT OnMyRegisteredMsg(WPARAM wParam ,LPARAM lParam);
定义函数:
LRESULT CDEMO12Dlg::OnMyRegisteredMsg(WPARAM wParam ,LPARAM lParam)
{
TCHAR szBuf[128]={0};
_stprintf(szBuf,_T("收到自定义消息2:ID=0x%X."),WM_MY_DEFINED_MSG);
SetDlgItemText(IDC_OUTPUT,szBuf);
return 0;
}