| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4144 人关注过本帖
标题:登录界面的代码放在哪里啊
只看楼主 加入收藏
赤冰
Rank: 1
等 级:新手上路
帖 子:397
专家分:0
注 册:2007-1-22
收藏
得分:0 

不会啊,我不会弄消息,因为补知道消息是怎么回事.我现在把代码都放到
CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)中了,可还是不行,再这里怎么获得doc指针啊
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
...
CLogin LoginDlg;
int result;
int ok=0;
CMainFrame* pMain=(CMainFrame*)AfxGetMainWnd();
CChickensDoc* pDoc=(CChickensDoc*)pMain->GetActiveDocument();
do{
result=LoginDlg.DoModal();
CString sql;
if(result==IDOK)
{
//登录
sql="select * from OPERATOR where checkperson='"+LoginDlg.m_Name+"'";
BSTR strsql=sql.AllocSysString();
if(pDoc->m_rec->State)
{
pDoc->m_rec->Close();
}
pDoc->m_rec->Open(strsql,pDoc->m_con.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
if(!pDoc->m_rec->BOF)
{
_variant_t var;
CString pass;
pDoc->m_rec->MoveFirst();
while(!pDoc->m_rec->SSTEOF)
{
var=pDoc->m_rec->GetCollect("password");
if(var.vt!=NULL)
{
pass=(LPCSTR)_bstr_t(var);
}
if(strcmp(pass,LoginDlg.m_Pass)==0)
{
ok=true;
break;
}
pDoc->m_rec->MoveNext();
}
}
}
else
{
//取消
return -1;
}
}while(ok<4);

return 0;
}
可是还事信息丢失,我跟踪执行,是先执行的doc,再执行的frame,(感谢7楼)可怎么还是不行啊

[此贴子已经被作者于2007-5-12 12:18:34编辑过]

2007-05-12 12:17
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
WM_SHOWWINDOW消息是窗口显示前的最后一个消息,表示将要显示主框架了,这个函数调用基类的ShowWindow函数之前,你就调用登陆代码 然后根据返回值来确定是否继续执行

2007-05-12 12:50
赤冰
Rank: 1
等 级:新手上路
帖 子:397
专家分:0
注 册:2007-1-22
收藏
得分:0 

那我怎么在密码补正确,或取消时退出应用程序啊

2007-05-12 13:23
赤冰
Rank: 1
等 级:新手上路
帖 子:397
专家分:0
注 册:2007-1-22
收藏
得分:0 
另外我试了以下,好象是个方法,不过就是上面的问题,还有我关闭应用程序时,这个登陆窗口怎么还会出现啊,
高手帮帮我啊

[此贴子已经被作者于2007-5-12 13:51:16编辑过]

2007-05-12 13:25
赤冰
Rank: 1
等 级:新手上路
帖 子:397
专家分:0
注 册:2007-1-22
收藏
得分:0 

余来,帮帮我啊

2007-05-12 14:29
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
登陆对话框是有返回值的,DoModal函数是显示对话框的,在调用登陆代码对话框DoModal之前,先将密码和帐号传给登陆对话框,或者在登陆对话矿中获取一样可以,
然后输入密码正确时,调用 EndDialog(1); 参数1是返回值,
如果密码错误就返回0 EndDialog(0);
然后判断返回值就是

CString password;
CString ID;
.....

Logon dlg
dlg.Setpassword(passworD); //将密码传给登陆代码框
dlg.SetId(ID); //将帐号.....

if ( dlg.DoModal == 1 ) //返回值自己设定就是,我这里是1就表示密码正确
{
//表示密码正确
}
else //密码错误或者其他原因
{
eixt(0); //退出
}

logon 在判断密码是否正确时,这样
CString temp_psw;
GetdlgItemText(IDC_PASSWORD,temp_psw); //获取输入到密码框中的密码

if ( temp_psw == logon::m_password ) //密码正确
{
EndDialog(1);
}
else
{
MessageBox("密码错误"); EndDialog(0); //密码错误返回0再次提醒返回值自己
//可以自由设置
}

其中m_password是保存密码的,IDC_PASSWORD是输入密码的编辑框ID号
最好在密码错误代码中加一个变量,记录错误的次数,如果超过3次就EndDialog(0);
小于3次就简单的返回 return;





2007-05-12 17:38
赤冰
Rank: 1
等 级:新手上路
帖 子:397
专家分:0
注 册:2007-1-22
收藏
得分:0 
dlg.Setpassword(passworD); //将密码传给登陆代码框
dlg.SetId(ID); //将帐号.....

那在对话框里还要添加两个设置函数吧,可是你传给对话框的密码和id从那来,是固定的么,不是吧,我需要的不是.这样我还要读取数据库,呵我现在的问题就是无法读取数据啊.我现在只好在对话框里重新声明ado指针了,也只能这么将就了.还是感谢你辛苦了.

还想问一个数据库的问题,数据库中什么类型是可变根据字符串的长度,我的数据库密码类型是varchar(10),可是我取出来之后,不是十位密码,他后面还有空格,我不好比较
2007-05-12 18:06
余来
Rank: 6Rank: 6
等 级:贵宾
威 望:26
帖 子:956
专家分:18
注 册:2006-8-13
收藏
得分:0 
不会啊,可以随机读取密码啊,先在主对话框中打开数据库,读取数据,这个应该是可以办到,然后读取数据库的密码和帐号,将这个帐号传给logon就是

2007-05-12 18:25
赤冰
Rank: 1
等 级:新手上路
帖 子:397
专家分:0
注 册:2007-1-22
收藏
得分:0 
大哥,我一开始的问题还记得么,呵,我这个笨蛋吧ado的指针初始化防在doc中了,而我的登陆窗口要放在Initinstance中,我的问题所在就是在这里我无法对数句库操作,因为初始化还没到doc.
2007-05-12 18:31
踏魔狼
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:1322
专家分:33
注 册:2005-9-22
收藏
得分:0 
那就把数据库的连接放到Initinstance()中呀!
不要弄的那么复杂呀!

=×&D o I p R e E n C g T l X&×=
2007-05-12 19:27
快速回复:登录界面的代码放在哪里啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017039 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved