设为首页 加入收藏

TOP

1.6.3 用户登录实现过程
2013-10-07 00:20:33 来源: 作者: 【 】 浏览:67
Tags:1.6.3 用户 登录 实现 过程

1.6.3  用户登录实现过程

本模块使用的数据表:tb_user

(1)创建一个对话框,打开对话框属性窗口,将对话框的ID设置为IDD_LOGIN_DIALOG,将Border属性设置为None。

(2)向对话框中添加一个图片控件、两个编辑框控件和两个按钮控件,各控件的属性设置如表1.3所示。

表1.3  控件资源设置

控件ID< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

IDC_EDIT1

CString  m_Name

IDC_EDIT2

CString  m_PassWord

IDC_STATIC

TypeBitmapImageIDB_LOGIN

IDC_OK

取消选择Visible属性

CBmpButton  m_OK

IDC_CANCEL

去掉Visible属性

CBmpButton  m_Cancel

(3)向对话框中添加PreTranslateMessage虚函数,在该函数中获取鼠标按下时的位置,如果是在“登录”按钮上,根据数据的正确性判断是否进入程序;如果在“退出”按钮上,则退出该程序。代码如下:

BOOL CLogin::PreTranslateMessage(MSG* pMsg) 
{
if(pMsg->message==WM_KEYDOWN && pMsg->wParam==13)  //判断
是否按下了Enter键
{
pMsg->wParam = 9;          //将按下的键改为Tab键
}
if(pMsg->message == WM_LBUTTONDOWN)     //判断鼠标左键是否按下
{
CRect rect,rc;
m_OK.GetWindowRect(&rect);         //获得“登录”按钮的区域
  m_Cancel.GetWindowRect(&rc);        //获得“退出”按钮的区域
CPoint point;
  GetCursorPos(&point);          //获得鼠标的位置
  if(rect.PtInRect(point))          //判断鼠标是否在“登录”按钮上
{
UpdateData(TRUE);
if(m_Name.IsEmpty() || m_PassWord.IsEmpty())   //判断数据是否为空
{
MessageBox("用户名或密码不能为空");
return FALSE;
}
m_Time++;           //计算登录次数
try
{
//创建连接对象实例
m_pConnection.CreateInstance("ADODB.Connection");
//设置连接字符串
CString strConnect="DRIVER={Microsoft Access Driver (*.mdb)};\
uid=;pwd=;DBQ=shujuku.mdb;";
//使用Open方法连接数据库
m_pConnection->Open((_bstr_t)strConnect,"","",adModeUnknown);
}
catch(_com_error e)
{
AfxMessageBox(e.Description());
}
//设置SQL语句
CString sql;
sql.Format("select * from tb_user where 用户名 = '%s'
and 密码 = '%s'",
m_Name,m_PassWord);
m_pRecordset = m_pConnection->Execute((_bstr_t)sql,NULL,
adCmdText);  //执行SQL语句
if(!m_pRecordset->adoEOF)
{
CDialog::OnOK();         //进入主窗体并关闭登录框
}
else
{
if(m_Time == 3)         //判断错误是否超过3次
{
MessageBox("密码3次不正确");
CDialog::OnCancel();      //关闭对话框
}
else
{
MessageBox("用户名或密码不正确");
m_Name = "";
m_PassWord = "";
UpdateData(FALSE);      //更新控件显示
}
}
m_pRecordset->Close();         //关闭记录集
m_pConnection->Close();        //断开数据库连接
}
if(rc.PtInRect(point))          //判断鼠标是否在退出按钮上
{
CDialog::OnCancel();         //退出程序
}
}
return CDialog::PreTranslateMessage(pMsg);
}
代码贴士

GetWindowRect:该函数返回指定窗口的边框矩形的尺寸。该尺寸相对于屏幕坐标左上角的屏幕坐标。

GetCursorPos:该函数检取光标的位置,以屏幕坐标表示。

PtInRect:该函数判断指定的点是否位于矩形内部。
【责任编辑:夏书 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.7.1 监控管理模块概述 下一篇1.6.1 用户登录模块概述

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: