027.MFC_映射消息
Posted malphite
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了027.MFC_映射消息相关的知识,希望对你有一定的参考价值。
映射消息
MFC中的消息映射宏
DECLARE_MESSAGE_MAP
BEGIN_MEASSAGE_MAP
END_MESSAGE_MAP
向导自动映射消息
手动添加映射消息
MFC会帮我们自动映射大部分消息,当MFC不能自动映射消息时就需要我们手动映射消息
一、建立名为message的MFC工程,并添加如图组件
1、双击清空-自动button进入messageDlg.cpp,MFC会自动向导映射消息产生OnBnClickedButton1()函数
在函数中添加清空消息函数SetDlgItemText(IDC_EDIT1,_T(""));
//向导自动映射消息
//ON_BN_CLICKED(IDC_BUTTON1, &CmessageDlg::OnBnClickedButton1)
void CmessageDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
SetDlgItemText(IDC_EDIT1,_T(""));
}
2、不要点击清空-手动button,防止自动向导映射消息
(1)在messageDlg.h添加红色部分
public:
afx_msg void OnBnClickedButton1();
afx_msg void OnBnClickedButton2();
(2)messageDlg.cpp添加红色部分
BEGIN_MESSAGE_MAP(CmessageDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &CmessageDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON2, &CmessageDlg::OnBnClickedButton2)
END_MESSAGE_MAP()
//手动映射消息
void CmessageDlg::OnBnClickedButton2()
{
SetDlgItemText(IDC_EDIT1,_T(""));
}
二、自动映射消息举例
1、修改对话框背景颜色
messageDlg.cpp添加红色部分
BOOL CmessageDlg::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CRect rect;
GetClientRect(rect);
CBrush brush; //创建画刷
brush.CreateSolidBrush(RGB(100,150,200)); //画刷属性实心rgb
pDC->FillRect(&rect,&brush);
return TRUE;
//return CDialogEx::OnEraseBkgnd(pDC);
}
2、统计文本框中字符个数并在static text中显示
messageDlg.cpp添加红色部分
void CmessageDlg::OnEnChangeEdit1()
{
// TODO: 如果该控件是 RICHEDIT 控件,它将不
// 发送此通知,除非重写 CDialogEx::OnInitDialog()
// 函数并调用 CRichEditCtrl().SetEventMask(),
// 同时将 ENM_CHANGE 标志“或”运算到掩码中。
// TODO: 在此添加控件通知处理程序代码
HWND hEdit = ::GetDlgItem(m_hWnd,IDC_EDIT1);
int nLen = ::SendMessage(hEdit,WM_GETTEXTLENGTH,0,0);//计算文本框字符个数
TCHAR szBuf[128] = {0};
_stprintf(szBuf,_T("已输入:%d"),nLen);
//_stprintf(szBuf,_T("已输入 : %d"),nLen);
SetDlgItemText(IDC_STATIC,szBuf);
}
遇到错误:error C4996: ‘_swprintf‘: This function or variable may be unsafe. Consider using _swprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
在stdafx.h中添加
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
以上是关于027.MFC_映射消息的主要内容,如果未能解决你的问题,请参考以下文章