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 |
Type:Bitmap、Image:IDB_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】