MFC 之用户登录界面
在软件界面中,我们常常需要对用户的身份进行验证,因此我们有必要学习一下登录界面如何编写,当验证通过后,又是如何调用主功能界面的。
一、登录界面搭建
首先我们基于对话框新建一个 MFC 应用程序,将默认的界面编辑成如下图所示:
接下来我们为界面控件添加变量,为用户名编辑框添加变量名 m_username
,为密码编辑框添加变量名 m_password
并将密码编辑框设置为不可见,然后将用户名编辑框和密码编辑框的资源 ID 分别更改为 IDC_USERNAME
和 IDC_PASSWORD
,最后分别双击 登录
、重置
、和 显示密码
复选框,添加对应的控件点击响应事件。
这里有一个注意点,要把新建项目后界面中的
确定
和取消
两个按钮给删除掉,直接重用这两个函数可能会出现无法关闭对话框等问题。
二、界面功能实现
step 1 重置功能
我们首先来实现简单的功能,为 重置
按钮的响应事件添加如下代码:
// 重置按钮响应函数
void CLoginDlg::OnBnClickedButton2()
{
// TODO: 在此添加控件通知处理程序代码
// 将用户名和密码编辑框设置为空
m_username.SetWindowText(L"");
m_password.SetWindowText(L"");
// 更新编辑控件的显示值
UpdateData(FALSE);
}
step 2 显示密码功能
双击 显示密码
复选框,跳转到对应的响应函数,添加如下代码:
// 显示密码复选框响应函数
void CLoginDlg::OnBnClickedCheck1()
{
// TODO: 在此添加控件通知处理程序代码
// 更新控件对应变量的值
UpdateData(TRUE);
// 获取密码编辑框控件的指针
CEdit* pmyEdit = (CEdit*)GetDlgItem(IDC_PASSWORD);
// 根据复选框状态设置密码显示状态
if (m_passwordcheck.GetCheck() == 1)
{
// 将密码显示为明文
pmyEdit->SetPasswordChar(0);
//ASSERT(!(pmyEdit->GetStyle() && ES_PASSWORD)); // 检查 pmyEdit 指向的控件是否不具有密码框风格
}
else
{
// 将密码显示为密文
pmyEdit->SetPasswordChar(L'●');
}
UpdateData(FALSE); // 更新编辑控件的显示值
pmyEdit->RedrawWindow(); // 立即重绘编辑框以更新显示
}
需要注意的是修改后立即重绘才能立刻将密码显示状态实时刷新,否则只有等鼠标移动到密码编辑框上才会触发密码显示更新。
step 3 登录功能
实现登录功能之前,我们首先在资源视图,右键 Dialog
添加一个 Dialog 资源,并将资源 ID 更改为 MAIN_DIALOG1
作为我们登录后要显示的主界面:
然后右键为主对话框添加类名 CMAINDlg
,之后双击 登录
按钮跳转到响应函数,添加如下代码:
// 确认按钮响应函数
void CLoginDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
// 更新控件对应变量的值
UpdateData(TRUE);
// 判断用户名和密码并进入主界面
CString username, password;
m_username.GetWindowText(username);
m_password.GetWindowText(password);
if (username == "admin" && password == "123456")
{
// 关闭登录界面
CDialogEx::OnOK();
// 弹出主界面
CMAINDlg MAINDlg;
MAINDlg.DoModal();
}
else
{
// 弹出窗口提示用户名或密码不正确
MessageBox(L"用户名或密码不正确,请重新输入!", L"提示", MB_OK);
}
}
好了,最后我们来验证一下效果,输入账号和密码,点击登录,效果如下: