【MFC-10】VS2010/MFC基于对话框程序的登录窗口实现

5 篇文章 0 订阅

一、开发环境


1、VS2010;

2、C++ / MFC;


二、登录窗口设计示例


1、新建基于对话框的MFC项目,命名为“UserLogin”;


2、资源视图中插入一个Dialog,修改ID为:IDD_LOGIN_DIALOG,标题修改为登录对话框,并添加控件,结果如图1所示;


图1

3、创建登录对话框类:CLoginDlg,添加控件变量如图2所示;


图2


4、将对话框类头文件添加到UserLogin.cpp;

// UserLogin.cpp : 定义应用程序的类行为。
//

#include "stdafx.h"
#include "UserLogin.h"
#include "UserLoginDlg.h"
#include "LoginDlg.h"


5、修改UserLogin.cpp函数BOOL CUserLoginApp::InitInstance()如下:

BOOL CUserLoginApp::InitInstance()
{
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// 创建 shell 管理器,以防对话框包含
	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;

	// 标准初始化
	// 如果未使用这些功能并希望减小
	// 最终可执行文件的大小,则应移除下列
	// 不需要的特定初始化例程
	// 更改用于存储设置的注册表项
	// TODO: 应适当修改该字符串,
	// 例如修改为公司或组织名
	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

	<span style="color:#ff0000;">// 登录对话框,系统登录
	CLoginDlg loginDlg;
	if(loginDlg.DoModal() == IDOK)
	{
		CUserLoginDlg dlg;
		m_pMainWnd = &dlg;
		INT_PTR nResponse = dlg.DoModal();
		if (nResponse == IDOK)
		{
			// TODO: 在此放置处理何时用
			//  “确定”来关闭对话框的代码
		}
		else if (nResponse == IDCANCEL)
		{
			// TODO: 在此放置处理何时用
			//  “取消”来关闭对话框的代码
		}
	}
	else
	{
		return FALSE;
	}</span>

	//CUserLoginDlg dlg;
	//m_pMainWnd = &dlg;
	//INT_PTR nResponse = dlg.DoModal();
	//if (nResponse == IDOK)
	//{
	//	// TODO: 在此放置处理何时用
	//	//  “确定”来关闭对话框的代码
	//}
	//else if (nResponse == IDCANCEL)
	//{
	//	// TODO: 在此放置处理何时用
	//	//  “取消”来关闭对话框的代码
	//}

	// 删除上面创建的 shell 管理器。
	if (pShellManager != NULL)
	{
		delete pShellManager;
	}

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
	//  而不是启动应用程序的消息泵。
	return FALSE;
}

6、登录对话框添加“登录按钮”消息响应;

void CLoginDlg::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	this->UpdateData(true);
	if(this->m_UserName.IsEmpty() || this->m_UserPassword.IsEmpty())
	{
		MessageBox(_T("用户名或密码不能为空,请重新输入!"),_T("用户登录信息"),MB_ICONINFORMATION);
		return;
	}
	else if(this->m_UserName == "Admin" && this->m_UserPassword == "12345")
	{
		CDialogEx::OnOK();
	}
	else
	{
		MessageBox(_T("用户名或密码不正确,请重新输入!"),_T("登录失败"),MB_ICONERROR);
		return;
	}
}

7、生成 ---> 生成解决方案,运行即可测试。



备注:

1)输入密码处的编辑框修改属性:“Password”为“True”;

2)实现注销登录:在主对话框中添加“注销”按钮及其消息响应;

void CUserLoginDlg::OnBnClickedButtonLogout()
{
	// TODO: 在此添加控件通知处理程序代码
	ShowWindow(SW_HIDE);

	CLoginDlg loginDlg;
	loginDlg.m_LoginType = 3;
	if (IDOK == loginDlg.DoModal())
	{
		Sleep(100);
		ShowWindow(SW_SHOW);
	}
	else
	{
		PostQuitMessage(0);
	}
}

3)用户名和密码登录信息可以采用数据库形式存储,具体可参考本人其他微博文章内容。




  • 16
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值