MFC的消息封装是通过消息映射处理的
MFC的消息处理定义了各种宏例如画图消息宏ON_WM_PAINT()
这些消息必须写在BEGIN_MESSAGE_MAP(theClass, baseClass)----END_MESSAGE_MAP()这两个宏之间
这就相当于把消息和消息处理函数添加到一个消息映射表中
宏展开后的样子,这个是展开按钮控件的消息
const AFX_MSGMAP* CTestDialogDlg::GetMessageMap()const
{ return GetThisMessageMap(); }
const AFX_MSGMAP* PASCAL CTestDialogDlg::GetThisMessageMap()
{
typedef CTestDialogDlg ThisClass;
typedef CDialogEx TheBaseClass;
static const AFX_MSGMAP_ENTRY _messageEntries[] =
{
{ WM_COMMAND, (WORD)BN_CLICKED, (WORD)BTN_TEST, (WORD)BTN_TEST, AfxSigCmd_v(static_cast< AFX_PMSG > (&CTestDialogDlg::OnBnClickedTestmsg)) },
{0, 0, 0, 0, AfxSig_end, (AFX_PMSG)0 }
};
static const AFX_MSGMAP messageMap =
{ &TheBaseClass::GetThisMessageMap, &_messageEntries[0] };
return &messageMap;
}
第一种方式处理控件交互
通过封装好的MFC类,调用其内部的成员函数来实现控件交互
//MFC 使用this指针设置文本
this->SetDlgItemText(EDT_TEST, _T("文本"));
this->SendDlgItemMessage(EDT_TEST, WM_SETTEXT, 0, (LPARAM)_T("文本"));
// 文本控件所对应的对象
CWnd* pEdtWnd = this->GetDlgItem(EDT_TEST);
//通过对象来设置文本:两种方法
pEdtWnd->SetWindowText(_T("设置文本"));
pEdtWnd->SendMessage(WM_SETTEXT, 0, (LPARAM)_T("文本"));
第二种方式处理控件交互DDX
DDX概念
将控件和一个变量绑定在一起,对变量的操作就是对控件的操作,在资源中选中控件点击右键选中添加变量就是把控件和变量绑定
有两种类型绑定一种是value,一种是Control,下列是value例子
语法
m_csEdtDDX //与EDIT控件绑定过的变量
m_csEdtDDX = _T("F:\\CR33\\MFC\\02\\展开.h");
UpdateData(FALSE); //数据从变量到文本框(此时EDIT编辑框内会显示F:\\CR33\\MFC\\02\\展开.h)
UpdateData(TRUE) //数据从控件到变量;
AfxMessageBox(m_csEdtDDX);