VS2013/MFC基于对话框编程:[11]编辑框
编辑框(Edit Control)作为对话框中常用的控件之一,常用来输入文本或者显示文本,比如用户名和密码的输入,当前数据的显示等等都少不了编辑框。其实win7自带的记事本就是一个编辑框,这里我将介绍编辑框的一些常用用法。
· Visual Studio 2013
1. 从工具箱中找到编辑框(Edit Control),拖动到对话框中,按图所示放置多个编辑框和一个按钮,用于说明编辑框的不同作用。
2. 首先选中任意一个编辑框,看看编辑框都有哪些属性,其中常用到属性有:
Multiline:多行,表示内容可以多行显示,一般记录性的编辑框需要多行;
Password:密码,表示文本以密码形式呈现,一般用来输出密码;
Read only:只读,表示文本内容只能读不能写;
Number:数字,表示只能输入数字;
Lowercase:小写,所有字母全部自动转换为小写显示;
Uppercase:大写,所有字母全部自动转换为大写显示;
Horizontal scroll:水平滚动条,需要先选中Multiline属性;
Vertical scroll:垂直滚动条,需要先选中Multiline属性;
3. 根据不同编辑框需要实现的功能不一样,分别修改编辑框的各个属性:
1、两个加值编辑框修改Number一个为真、一个为假;
2、密码输入框修改Password为真;
3、数据之和显示框修改Read only为真;
4、状态提示框修改Read only为真,Uppercase为真;
5、记录编辑框修改Read only为真,Multiline为真,Vertical scroll为真;
4. 修改各个控件的ID分别为IDC_Add1、IDC_Add2、IDC_Result、IDC_Record、IDC_Password、IDC_Status,按钮ID为IDC_CALC;从resource文件中可以查看控件ID的定义。
5. 通过类向导为各个控件添加变量:
1、给两个加数以及加数之和添加double型的变量m_add1,m_add2,m_result;
2、给记录框添加控件类型的CEdit m_record;
3、给密码输入框添加字符串类型的变量CString m_passWord;
4、状态框不添加变量,以便讲述如何通过ID直接访问控件。
6. 修改初始化函数OnInitDialog,添加语句:
m_record.SetWindowTextW(_T("请输入密码!\n"));
GetDlgItem(IDC_CALC)->EnableWindow(false);
这样就设置了提示语句,并将计算按钮设置为不可用,GetDlgItem函数通过ID获取控件,这样就不必添加控件变量。
7. 类向导,添加虚函数PreTranslateMessage。
8. 修改虚函数:
BOOL CDemoDlg::PreTranslateMessage(MSG*pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
switch (pMsg->wParam)
{
case VK_RETURN:
UpdateData(true);
if ( m_passWord==_T("litr123"))
{
GetDlgItem(IDC_CALC)->EnableWindow(true);
GetDlgItem(IDC_Status)->SetWindowTextW(_T("success"));
}
else
{
GetDlgItem(IDC_Status)->SetWindowTextW(_T("ERROR"));
}
case VK_ESCAPE:
return true; break;
}
returnCDialogEx::PreTranslateMessage(pMsg);
}
函数功能:一来可以防止按下回车或者ESC按键时退出程序,二来可以判断密码是否正确并更新状态内容。
9. 接下来修改按钮按下事件处理函数,实现两数相加并更新记录列表。
void CDemoDlg::OnBnClickedCalc()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true); //获取数据
m_result = m_add1 + m_add2;
UpdateData(false); //更新数据
CString str;
str.Format(_T("%g %s %g %s%g"), m_add1, _T("+"), m_add2, _T("="), m_result); //数据显示格式
str += _T("\r\n"); //回车换行
int lastLine =m_record.LineIndex(m_record.GetLineCount() - 1);
m_record.SetSel(lastLine + 1, lastLine +2, 0);
m_record.ReplaceSel(str); //在最后一行添加新的内容
}
10. 测试程序运行结果,看看编辑框不同属性会呈现什么不同的效果。
· 注意获取数据和更新数据时需要采用UpdateData函数
· 滚动条的加入需要配合Multiline属性
http://jingyan.baidu.com/article/76a7e409b3cb3bfc3b6e15e6.html