MFC做一个登录界面(用户名,密码以及密码的明文密文切换)

没有系统的学习过MFC,处于需要用什么就查什么的阶段,慢慢摸索MFC吧,环境是VS2015。——2019.8.23

需求描述:

  1. 简单的登陆界面,仅有用户名密码的输入;
  2. 确定后验证正确进入主界面,失败则弹出提示框,并自动清空输入信息,重新输入;
  3. 密码的显示为密文;

第一步:新建一个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('*'); // 显示格式为星号
 }

完成,下面来进行测试:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
输入正确进入主界面,主界面还没有任何功能
在这里插入图片描述

测试效果也不错,如果是做普通的小软件,这种登录界面的功能已经完全够用了。

  • 28
    点赞
  • 206
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
可以使用MFC中的对话框控件来实现用户名密码窗口的添加。具体步骤如下: 1. 在Visual Studio中创建一个MFC应用程序,选择对话框为主窗口。 2. 在资源视图中添加一个对话框,设置好对话框的布局和控件。 3. 在代码中添加对话框类的声明和实现文件,将对话框类作为主窗口类的成员变量。 4. 在主窗口类的OnInitDialog()函数中初始化对话框类,并将其显示出来。 在实现密码明文密文切换时,可以使用MFC中的编辑框控件和复选框控件。具体步骤如下: 1. 在对话框中添加一个编辑框控件和一个复选框控件。 2. 在编辑框的属性中设置密码风格,使其在输入时显示为星号。 3. 在复选框的属性中设置默认值为未选中。 4. 在代码中添加复选框控件的响应函数,根据复选框的状态来切换编辑框的密码风格。 下面是一个简单的示例代码: // 声明对话框类 class CLoginDlg : public CDialogEx { DECLARE_DYNAMIC(CLoginDlg) public: CLoginDlg(CWnd* pParent = nullptr); // 标准构造函数 virtual ~CLoginDlg(); // 对话框数据 #ifdef AFX_DESIGN_TIME enum { IDD = IDD_LOGIN_DIALOG }; #endif protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 DECLARE_MESSAGE_MAP() private: CEdit m_editUsername; // 用户名编辑框控件 CEdit m_editPassword; // 密码编辑框控件 CButton m_checkShowPassword; // 显示密码复选框控件 public: CString m_strUsername; // 用户名字符串 CString m_strPassword; // 密码字符串 BOOL m_bShowPassword; // 是否显示密码 }; // 实现对话框类 CLoginDlg::CLoginDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_LOGIN_DIALOG, pParent) { m_bShowPassword = FALSE; } CLoginDlg::~CLoginDlg() { } void CLoginDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_EDIT_USERNAME, m_editUsername); DDX_Control(pDX, IDC_EDIT_PASSWORD, m_editPassword); DDX_Control(pDX, IDC_CHECK_SHOW_PASSWORD, m_checkShowPassword); } BEGIN_MESSAGE_MAP(CLoginDlg, CDialogEx) ON_BN_CLICKED(IDC_CHECK_SHOW_PASSWORD, &CLoginDlg::OnBnClickedCheckShowPassword) END_MESSAGE_MAP() // 对话框类的OnInitDialog()函数 BOOL CMainFrame::OnInitDialog() { CDialogEx::OnInitDialog(); // 初始化登录对话框 m_loginDlg.Create(IDD_LOGIN_DIALOG, this); m_loginDlg.ShowWindow(SW_SHOW); return TRUE; } // 复选框控件的响应函数 void CLoginDlg::OnBnClickedCheckShowPassword() { m_bShowPassword = m_checkShowPassword.GetCheck(); if (m_bShowPassword) m_editPassword.SetPasswordChar(0); // 显示密码 else m_editPassword.SetPasswordChar('*'); // 隐藏密码 }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值