没有系统的学习过MFC,处于需要用什么就查什么的阶段,慢慢摸索MFC吧,环境是VS2015。——2019.8.23
需求描述:
- 简单的登陆界面,仅有用户名密码的输入;
- 确定后验证正确进入主界面,失败则弹出提示框,并自动清空输入信息,重新输入;
- 密码的显示为密文;
第一步:新建一个MFC项目,选择基于对话框类型;
第二步:把对话框需要的控件都拖出来,默认的确认和取消也不用删掉,如下
编辑框可以直接在属性里把password设置为true,这样密码显示就是黑色圆点,之所以没有直接在属性里设置是因为我发现程序里我改不回原来的圆点样式,所以就还是明文显示状态,我们在对话框初始化函数里再设置为密文显示。
第三步:为控件添加变量,如下
CString m_username; // 用户名字符串
CString m_password; // 密码字符串
afx_msg void OnBnClickedOk(); // “确认”按钮响应函数
CButton m_passwordcheck; // 复选框变量
afx_msg void OnBnClickedPasswordstyle(); // “显示密码”复选框响应函数
第四步:新建一个主程序对话框,登录成功后进入该界面。在资源视图的Dialog右键选择添加资源,新建一个对话框,如下
同时需要在登录对话框的LOGINDlg.cpp中添加主程序对话框的头文件“MAINDlg.h”
第五步:编写相应程序。
- 初始化密码显示形式为星号,在OnInitDialog()函数中添加如下代码
// TODO: 在此添加额外的初始化代码
CEdit*pmyEdit = (CEdit*)GetDlgItem(IDC_PASSWORD); // 密码编辑框控件的指针
pmyEdit->SetPasswordChar('*'); // 显示格式为星号
- 为OnBnClickedOk()函数添加如下代码
// TODO: 在此添加控件通知处理程序代码
UpdateData(TRUE); // 更新控件对应变量的值
if (m_username == "admin" && m_password == "123456")
{
// 进入主对话框界面
CDialogEx::OnOK(); // 关闭登陆界面
CMAINDlg MAINDlg;
MAINDlg.DoModal(); // 弹出主对话框(模态对话框)
}
else
{
// 弹出窗口提示用户名或密码不正确
MessageBox(_T("用户名或密码不正确!"), _T("提示"), MB_OK);
// 清空用户名和密码,便于重新输入
m_username = "";
m_password = "";
UpdateData(FALSE); // 更新编辑框控件的显示值
}
- 为OnBnClickedOk()函数添加如下代码
// TODO: 在此添加控件通知处理程序代码
// 若在显示密码前打勾,则密码显示为明文,默认为密文(星号)
UpdateData(TRUE); // 更新控件对应变量的值
if (m_passwordcheck.GetCheck() == 1)
{
CEdit*pmyEdit = (CEdit*)GetDlgItem(IDC_PASSWORD); // 密码编辑框控件的指针
pmyEdit->SetPasswordChar(0); // 显示格式为明文
ASSERT(!(pmyEdit->GetStyle() & ES_PASSWORD));
}
else
{
CEdit*pmyEdit = (CEdit*)GetDlgItem(IDC_PASSWORD); // 密码编辑框控件的指针
pmyEdit->SetPasswordChar('*'); // 显示格式为星号
}
完成,下面来进行测试:
输入正确进入主界面,主界面还没有任何功能
测试效果也不错,如果是做普通的小软件,这种登录界面的功能已经完全够用了。