我要做一个程序,其中要使用登陆对话框,那我 要掌握的是,当程序可判断用户名跟密码正确之后,如何调用下一个对话框?
该程序完整可在这下载http://www.code365.com/tupian/2005/12/16/2005121621184495.rar登陆框输入密码,用户名后判断用户输入的正确与否似乎是这段:void CLogonDlg::OnOK()
{
UpdateData();
if(m_strAdmin.IsEmpty() || m_strPass.IsEmpty())
{
AfxMessageBox("请输入用户名和密码");
}
else
{
CString sql="SELECT * FROM Admin where AdminName='"+theApp.g_Admin+"' and pwd='"+m_strPass+"'";
try
{
m_pRecordset.CreateInstance("ADODB.Recordset"); //查询数据库,看是否有此用户名和密码 m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF) //如果没有此用户名和密码
{
MessageBox("请输入正确的用户名和密码","错误",MB_ICONEXCLAMATION);
SetDlgItemText(IDC_EDIT1,"");
GetDlgItem(IDC_EDIT1)->SetFocus();
}
else
{
theApp.g_Admin=m_strAdmin;
theApp.g_Pass=m_strPass;
CDialog::OnOK();
}
}
catch (_com_error e)
{
CATCH_ERROR;
return;
}
}
}
------------------------------------
所以,从该段程序,我不知道他判断完用户名和密码是否正确之后,是如何调用下面的程序窗口的?拜求达人!!!!
该程序完整可在这下载http://www.code365.com/tupian/2005/12/16/2005121621184495.rar登陆框输入密码,用户名后判断用户输入的正确与否似乎是这段:void CLogonDlg::OnOK()
{
UpdateData();
if(m_strAdmin.IsEmpty() || m_strPass.IsEmpty())
{
AfxMessageBox("请输入用户名和密码");
}
else
{
CString sql="SELECT * FROM Admin where AdminName='"+theApp.g_Admin+"' and pwd='"+m_strPass+"'";
try
{
m_pRecordset.CreateInstance("ADODB.Recordset"); //查询数据库,看是否有此用户名和密码 m_pRecordset->Open((_variant_t)sql,_variant_t((IDispatch*)theApp.m_pConnection,true),adOpenStatic,adLockOptimistic,adCmdText);
if(m_pRecordset->adoEOF) //如果没有此用户名和密码
{
MessageBox("请输入正确的用户名和密码","错误",MB_ICONEXCLAMATION);
SetDlgItemText(IDC_EDIT1,"");
GetDlgItem(IDC_EDIT1)->SetFocus();
}
else
{
theApp.g_Admin=m_strAdmin;
theApp.g_Pass=m_strPass;
CDialog::OnOK();
}
}
catch (_com_error e)
{
CATCH_ERROR;
return;
}
}
}
------------------------------------
所以,从该段程序,我不知道他判断完用户名和密码是否正确之后,是如何调用下面的程序窗口的?拜求达人!!!!
解决方案 »
- new abc() 和 abc a = new() 的区别
- 40分求解 :正确DeleteObject,
- 关于CComboBox显示item问题
- 在VMware上测试WINSOCK问题,高手帮个忙
- 软件发布,感性趣的朋友可以看看
- 关于 基于SPI的无进程木马的演示程序 编译的问题?我编译不了
- 关于将图形放大缩小的问题.
- 怎么用API 编写一个简单文件传输程序?
- 初学者的难课!!!请言简意赅地介绍一番有一点c编程经验的家伙如何快速地学习VC,我好像已经入门只是有一点不知所措!!!
- 请问如何使用多线程方式实现遍历IP段(IP number > Thread Number)
- 还有必要学习VC++吗?
- 根据线程的ID不能得到句柄,反过来也不行?????有方法吗
if (dlgLogon.DoModal() != IDOK)
return FALSE; //退出程序
//当然不退出的话就是继续下面的程序,比如创建和显示主界面。
如果错了,还保持在原地.如果密码对了,就OnOk明白了?比如说,在主对话框中的初始化函数中:HIDE WINDOWCPassWord dig;dig.DoModem;SHOW WINDOW
在CLogonDlg添加一个成员变量,初始化为FALSE:
BOOL m_bOK;
在CLogonDlg::OnOK()中:
{
if(验证通过)
m_bOK = TRUE;
}然后:
CLogonDlg dlg;
dlg.DoModal();if(dlg.m_bOK == TRUE)
{
执行主程序;
}
else
{
退出程序;
}
dlg.DoModal();if(dlg.m_bOK == TRUE)
{
执行主程序;
}
else
{
退出程序;
}
这个,“执行主程序” 怎么执行呢?
if(dlg.m_bOK == TRUE)
{
执行主程序;
}
在执行主程序里面加入CMainDlg dlg;
dlg.DoModal();就可以启动主对话框了`~~
其中一定要把MainDlg.h加入进来~~~
{
CString strTitle;
strTitle.LoadString(IDS_TITLE);
m_hOnlyMutex = ::CreateMutex(NULL, FALSE, strTitle);
if (::WaitForSingleObject(m_hOnlyMutex, 0) == WAIT_TIMEOUT)
{
MessageBox((HWND)this->m_pMainWnd, "应用程序已经运行", "调度管理", MB_ICONINFORMATION | MB_OK);
return FALSE;
} CoInitialize(NULL);
theApp.ReadConfig(); CDispatchLoginDlg dlgLogin;
if (IDOK != dlgLogin.DoModal())
{
//MessageBox(NULL, _T("登陆失败"), _T("调度管理"), MB_ICONEXCLAMATION | MB_OK);
return FALSE;
}.............
.............}int DispatchApp::ExitInstance()
{
CoUninitialize( ); //关闭COM组件库,释放COM资源
if (m_hOnlyMutex)
CloseHandle(m_hOnlyMutex); return CWinApp::ExitInstance();
}
{
int nCount=0;
while(nCount<3)
{
CPasswordDlg PassDlg;//CPasswordDlg相当于登陆对话框
if(PassDlg.DoModal()==IDOK)
{
if((strcmp(PassDlg.m_strPassword,"1234")!=0)||
(strcmp(PassDlg.m_strUser,"rj2003")!=0))
{
MessageBox(NULL,"用户名或口令错误,请重试!","错误信息",MB_OK|MB_ICONERROR);
nCount++;
}
else
break;
}
else
return FALSE;
}//////////while if(nCount>=3)
{
MessageBox(NULL,"口令输入已经超过三次,请退出!","错误信息",MB_OK|MB_ICONERROR);
return FALSE;
}
////////////////////////////////////////////
AfxEnableControlContainer(); ........
// The one and only window has been initialized, so show and update it.
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow(); return TRUE;
}