一、开发环境
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)用户名和密码登录信息可以采用数据库形式存储,具体可参考本人其他微博文章内容。