1、MFC中用DECLARE_MESSAGE_MAP宏声明消息映射函数;
2、MFC中用BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏实现消息映射;
3、每个MFC应用程序中都存在一个消息响应链表,这个表由DECLARE_MESSAGE_MAP定义,并
由BEGIN_MESSAGE_MAP和END_MESSAGE_MAP宏之间的代码填充内容。这样,取得消息后,MFC
会查询这个表,对于感兴趣的消息会调用其响应函数,对于没有处理的消息,会继续查询其父类的映射表。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
1、新建MFC工程MsgInMfc;
2、在其上添加一个多行文本框,其ID为IDC_EDT_INPUT;
3、在其上添加一个静态文本控件,其ID为IDC_LEN;
4、将“确定”按钮ID改为IDC_BTN_CLEAR,并将其文本改为“清空”;
///主对话框头文件中添加
afx_msg void OnBtnClear();///清楚按钮的响应函数
afx_msg void OnEdtInputChange();
afx_msg void OnEraseBackGround(WPARAM wp ,LPARAM lp);///自定义消息:参数格式一定
//清空按钮响应函数
void CMsgInMfcDlg::OnBtnClear()
{
// TODO: Add your control notification handler code here
//清除输入文本框中的字符
SetDlgItemText(IDC_EDT_INPUT ,_T(""));
OnEdtInputChange();
}
//EN_CHANGE消息的响应函数
void CMsgInMfcDlg::OnEdtInputChange()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CDialog::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
///获取输入文本框句柄
HWND hEdit = ::GetDlgItem(m_hWnd ,IDC_EDT_INPUT);
///获得文本框中文字的长度
int nLen = ::SendMessage(hEdit , WM_GETTEXTLENGTH ,0 , 0);
//显示长度到界面
TCHAR szBuf[128] = {0};
_stprintf(szBuf , _T("已输入:%d") , nLen);
SetDlgItemText(IDC_LEN ,szBuf);
// TODO: Add your control notification handler code here
}
///WM_ERASEBKGND消息的响应函数
void CMsgInMfcDlg::OnEraseBackGround(WPARAM wp ,LPARAM lp)
{
///用自定义的颜色填充窗体背景
HDC hDC = (HDC )wp; ///*****************************
RECT rc = {0};
GetClientRect(&rc);
HBRUSH hb = CreateSolidBrush(RGB(100,150 ,200));
FillRect(hDC , &rc ,hb);
DeleteObject(hb);
}
///主对话框源文件中添加映射消息和响应函数
ON_BN_CLICKED(IDC_BTN_CLEAR, OnBtnClear)
ON_EN_CHANGE(IDC_EDT_INPUT, OnEdtInputChange)
ON_MESSAGE(WM_ERASEBKGND, OnEraseBackGround)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
说明:
1、在BEGIN_MESSAGE_MAP和END_MESSAGE_MAP之间添加消息映射代码时要注意:手动添加的代码要放在特殊的注释行“//}}AFX_MSG_MAP”之后,以免影响类向导的运行;
2、程序中,映射WM_ERASEBKGND消息时,采用了ON_MESSAGE宏。使用类似的方法,此宏可以映射任何一个系统消息。
3、MFC预先对常用的消息都做了专门的映射宏以简化代码,如本例中的WM_REASEBKGND消息对应的宏是ON_WM_REASEBKGND。这些宏都定义在MFC的头文件“AFXMSG_.H”中