03. MFC中的子类化,几种设置Edit文本的方法
需求:对话框中的Edit Control只能输入字母和数字。
解决方案:继承CEdit类,重写OnChar函数,输入合法则调用CEdit::OnChar,否则直接返回。
1. 右键项目-添加-新建项,选择图中的MFC类
2. 选则正确的基类,点确定
3. 资源视图里放一个Edit,右键-添加变量
4. 填写必要信息,点击完成
5. 继续右键Edit - 类向导 ,选则WM_CHAR消息,双击,确定
6. 在自动生成的函数中填入逻辑,补上头文件CMyEdit2.h,运行即可。
void CMyEdit2::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags) { if ('0' <= nChar && nChar <= '9' || 'a' <= nChar && nChar <= 'z' || 'A' <= nChar && nChar <= 'Z') { CEdit::OnChar(nChar, nRepCnt, nFlags); } }
设置Edit文本的方法:
void CMFCApplication1Dlg::OnBnClickedButton1() { //方法1 CWnd *pEdit = GetDlgItem(IDC_EDIT4); CString strText; pEdit->GetWindowText(strText); AfxMessageBox(strText); //方法2 GetDlgItemText(IDC_EDIT4, strText); AfxMessageBox(strText); //方法3 TCHAR buff[MAXBYTE] = {}; pEdit->SendMessage(WM_GETTEXT, MAXBYTE, (LPARAM)buff); AfxMessageBox(buff); //方法4 m_strEditText = L"Heeeeee"; UpdateData(FALSE);//FALSE则调用SetWindowText,TRUE则GetWindowText AfxMessageBox(m_strEditText); }
方法4的操作如下:
1. 右键Edit Control - 添加控制变量
2. 之后操作变量m_strEditText即可,要调用UpdateData(FALSE);//FALSE则调用SetWindowText,TRUE则GetWindowText
3. 右键-类向导-成员变量,可以看到映射的成员。图中第一个时控件子类化的映射,第二个是文本的映射。