首先MFC连接mysql数据库的配置百度配好,这里不再解释。注意x64和x32配置时是有区别的。x64的系统libmysqld.dll文件要放到工程文件X64\DEBUG中才能配置好数据库连接。
1.新建MFC工程 命名为登录界面。在资源视图添加对话框资源IDD_DIALOG1
给该对话框定义一个dlg类
2.打开该对话框资源加入两个edit(输入的账号密码),两个static(用户名:密码:),一个checkbox(记住密码)。
3.打开dlg.h文件在public加入
CString user1,password;
MYSQL_RES *res;
MYSQL m_sqlCon;
MYSQL_ROW row;
4.找到登录界面.cpp文件中的BOOL C登录界面App::InitInstance()函数添加补充如下代码
dlg dlgg;
if(dlgg.DoModal()==IDOK)
{
C登录界面Dlg dlg;
m_pMainWnd = &dlg;
INT_PTR nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: 在此放置处理何时用
// “确定”来关闭对话框的代码
}
else if (nResponse == IDCANCEL)
{
// TODO: 在此放置处理何时用
// “取消”来关闭对话框的代码
}
}
else
{
return FALSE;
}
5.双击新建对话框资源中的 确定控件添加代码
GetDlgItem(IDC_EDIT1)->GetWindowText(user1);
GetDlgItem(IDC_EDIT2)->GetWindowText(password);
const char user[] = "root";
const char pswd[] = "1234";
const char host[] = "localhost";
const char table[] = "mysql";
unsigned int port = 3306;
MYSQL_RES *res;
MYSQL m_sqlCon;
MYSQL_ROW row;
if(user1.IsEmpty()||password.IsEmpty())
{
MessageBox(_T("用户名或密码不能为空!"),_T("用户登录信息"));
return;
}
mysql_init(&m_sqlCon);
if(mysql_real_connect(&m_sqlCon, host,user,pswd,table,port,NULL,0))
{
mysql_query(&m_sqlCon, "SET NAMES GBK");
int ress=mysql_query(&m_sqlCon,"select * from 用户账户密码");// 查询数据库中的"用户账号密码"表
if(!ress)
{
res=mysql_store_result(&m_sqlCon);
if(res)
{
for(int i=0;i<res->row_count;i++)
{
row=mysql_fetch_row(res);
if(user1==row[0]&&password==row[1])
{
mysql_free_result(res);
mysql_close(&m_sqlCon);
CFileFind finder; //查找是否存在ini文件,若不存在,则生成一个新的默认设置的ini文件,这样就保证了我们更改后的设置每次都可用
BOOL ifFind = finder.FindFile(_T("d:\\RoadDataManagerApp.ini"));
if( !ifFind )
{
::WritePrivateProfileStringW(_T(""+user1+"用户"),_T("UID"),_T(""+user1+""),_T("d:\\RoadDataManagerApp.ini"));
::WritePrivateProfileStringW(_T(""+user1+"用户"),_T("PWD"),_T(""+password+""),_T("d:\\RoadDataManagerApp.ini"));
}
::WritePrivateProfileStringW(_T(""+user1+"用户"),_T("UID"),_T(""+user1+""),_T("d:\\RoadDataManagerApp.ini"));
::WritePrivateProfileStringW(_T(""+user1+"用户"),_T("PWD"),_T(""+password+""),_T("d:\\RoadDataManagerApp.ini"));
CDialogEx::OnOK();
break;
}
else
{
if(i==res->row_count-1)
{
MessageBox(_T("用户名或密码不正确"),_T("提示"));
return;
}
}
}
}
}
}
6.双击新建对话框的记住密码checkbox控件
添加如下代码
GetDlgItem(IDC_EDIT1)->GetWindowText(user1);
GetDlgItem(IDC_EDIT2)->GetWindowText(password);
::CButton *CB=(CButton*)GetDlgItem(IDC_CHECK1);
if(CB->GetCheck())
{
CString m_strCurrentUID,m_str;
::GetPrivateProfileStringW(_T(""+user1+"用户"),_T("UID"),_T(""+user1+""),m_strCurrentUID.GetBuffer(MAX_PATH),MAX_PATH,_T("d:\\RoadDataManagerApp.ini"));
::GetPrivateProfileStringW(_T(""+user1+"用户"),_T("PWD"),_T(""+password+""),m_str.GetBuffer(MAX_PATH),MAX_PATH,_T("d:\\RoadDataManagerApp.ini"));
this->ID_ED1.SetWindowTextW(m_strCurrentUID);
this->ID_ED2.SetWindowTextW(m_str);
}
7.编译运行,功能实现