403上位机VC MFC实现软件多用户登录功能
软件多用户登录界面
功能展示
上位机软件都会提供不同权限的账号给客户使用,如提供工程师,管理员,操作员账号对应着不同权限,我们当前例程就实现多权限的仿QQ登录界面,效果如图。背景为FLASH动画,提供有Technicians,Engineers,Administrators三个用户对应不同密码,密码保存与读取都经过加密处理,另外提供一万能钥匙,在全部密码忘记时可用万能钥匙复位密码
要点提示
例程有几个要点,FLASH动画背景使用是的控件Shockwave Flash Object,例程添加控件后,设置了几个属性,选择了DISABLED才能拖动,Menu设为FALSE才不显示菜单,tab order设置为最大全部控件才能显示在flash控件顶端;
在函数Layout()/中进行控件排版时,尺寸常数都是参照QQ登录界面大致复制;
例程密码的保存与读取函数 void WritePasswordString(CString sSectionName,CString sKeyName,CString sData);
void ReadPasswordString(CString sSectionName,CString sKeyName,CString &sData); 调用了两函数GetPrivateProfileString()与WritePasswordString()
其中DWORD GetPrivateProfileString( LPCTSTR lpAppName, LPCTSTR lpKeyName, LPCTSTR lpDefault, LPTSTR lpReturnedString, DWORD nSize, LPCTSTR lpFileName ); 其参数含义为
?lpAppName, //配置文件的section名. lpKeyName, //配置文件的key名. lpDefault : 如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量.
lpReturnedString : 接收INI文件中的值的CString对象,即目的缓存器.
nSize : 目的缓存器的大小.
lpFileName : 是完整的INI文件名
BOOL WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);
LPCTSTR lpAppName 是INI文件中的一个字段名.
LPCTSTR lpKeyName 是lpAppName下的一个键名,通俗讲就是变量名.
LPCTSTR lpString 是键值,也就是变量的值,不过必须为LPCTSTR型或CString型的.
LPCTSTR lpFileName 是完整的INI文件名,如果没有指定完整路径名,则会在windows目录(默认)查找文件。如果文件没有找到,则函数会在windows目录创建它。
实现功能
1.新建基于对话框的应用程序
2.复制例程根目录文件夹res图片及FLASH资源到自己工程中,图片载入到工程中备使用,将根目录文件夹SysFiles复制到工程中,内含用户密码加密保存与读取的文件;
3.依照例程界面添加Shockwave Flash Object控件作为背景,并联变量CShockwaveFlash m_Flash;添加图片控件IDD_GKBC8_DIALOG设置其位图作为用户头像。添加扩展组合框IDC_COMBOBOXEX1,组合框IDC_EDIT1作为用户及密码的输入。添加选择框IDC_CHECK1, IDC_CHECK2,作为记住密码,自动登录选择用。添加静态文件IDC_REGISTE, IDC_GETPAS作为注册账号,找回密码用。添加按钮IDC_LOGON关联点击函数用于登录验证
void CGkbc8Dlg::OnLogon() //用户登录
{
CString sCurrentName,sCurrentSecret,sGet;
CComboBoxEx *pLogOnNameBox= (CComboBoxEx *)GetDlgItem((IDC_COMBOBOXEX1));
pLogOnNameBox->GetLBText(pLogOnNameBox->GetCurSel(),sCurrentName);
GetDlgItemText(IDC_EDIT1,sCurrentSecret);
//<>万能密码
if(sCurrentName.IsEmpty()&&!sCurrentSecret.Compare("工控编程吧(gkbc8.com)"))
{
MessageBox("已成功以万能密码登录");
return;
}
//<>用户登录
ReadPasswordString("PASSWORDS",sCurrentName,sGet);
if(!sCurrentSecret.Compare(sGet))//相同
{
sGet.Format("%s 欢迎回来",sCurrentName);
MessageBox(sGet);
}
else
MessageBox("登录信息错误");
}
4.添加自定义变量及函数 CImageList m_ImageList; void Layout();
void WritePasswordString(CString sSectionName,CString sKeyName,CString sData);
void ReadPasswordString(CString sSectionName,CString sKeyName,CString &sData);并在程序初始化时化时初始化
Layout(); //排版控件
CenterWindow();//主窗口剧中
//<>初始化控件
CComboBoxEx *pLogOnNameBox= (CComboBoxEx *)GetDlgItem((IDC_COMBOBOXEX1));
CString str[]={"Technicians","Engineers","Administrators"};
m_ImageList.Create(16,16,ILC_COLOR24|ILC_MASK,1,0);
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_TECHNICIAN));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ENGINEER));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ADMIN));
pLogOnNameBox->SetImageList(&m_ImageList);
for(int i=0;i<3;i++)
{
COMBOBOXEXITEM cbi;
cbi.mask = CBEIF_IMAGE|CBEIF_INDENT|CBEIF_OVERLAY|
CBEIF_SELECTEDIMAGE|CBEIF_TEXT;
cbi.iItem = i;
cbi.pszText = str.GetBuffer(0);
cbi.cchTextMax = str.GetLength();
cbi.iImage = i;
cbi.iSelectedImage = i;
cbi.iOverlay = 0;
cbi.iIndent = (0 & 0x03);
pLogOnNameBox->InsertItem(&cbi);
}
pLogOnNameBox->SetCurSel(0);
最后添加主窗口的鼠标点击函数,并添加代码::SendMessage(m_hWnd,WM_SYSCOMMAND,SC_MOVE|HTCAPTION,0); 使窗口可以点击拖拽
我们来演示下功能实现的整个过程
如果您认可,可联系功能定制! 如果您着急,充值会员可直接联系发您资料!
|