📄 logindlg.cpp
字号:
// LoginDlg.cpp : implementation file
//
#include "stdafx.h"
#include "client.h"
#include "LoginDlg.h"
#include "msg.h"
#include "setupserverdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLoginDlg dialog
CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
: CDialog(CLoginDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CLoginDlg)
m_LoginType = FALSE;
m_userID = _T("");
//}}AFX_DATA_INIT
lresult=0;
// m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLoginDlg)
DDX_Control(pDX, ID_USER_PWD, m_EditPwd);
DDX_Check(pDX, ID_ONHIDE_LOGIN, m_LoginType);
DDX_Text(pDX, ID_USERID, m_userID);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
//{{AFX_MSG_MAP(CLoginDlg)
ON_WM_TIMER()
ON_BN_CLICKED(ID_USER_REGISTR, OnUserRegistr)
ON_WM_PAINT()
ON_MESSAGE(WM_RECIEVE_MSG,ProcRecv)
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLoginDlg message handlers
void CLoginDlg::OnOK()
{
// CString m_userID;
/* int sel=m_IdList.GetCurSel();
m_IdList.GetLBText(sel,m_userID); */
UpdateData();
m_userID+="\\";
uCurID=atol(m_userID);
//打开文件m_userID\users.db并读取文件内容
CFile file;
if(file.Open(m_userID+USERFILE,CFile::modeRead))
{
int offsetLength=UserFileReservedLength;
char pass[MaxPasswordLength];
file.Seek(offsetLength,CFile::begin);
UCHAR ch;
file.Read(&ch,sizeof(UCHAR));
file.Seek(2,CFile::current);
file.Read(pass,ch);
file.Close();
pass[ch]='\0';
CString CurPwd;
m_EditPwd.GetWindowText(CurPwd);
if(!CurPwd.Compare(pass))
{
pwd=CurPwd;
CFile f1;
if(f1.Open(m_userID+USERSETUP,CFile::modeRead))
{
f1.Read((char*)&uServerIP,sizeof(DWORD));
f1.Read((char*)&uPort,sizeof(DWORD));
f1.Close();
CDialog::OnOK();
return;
}
}
}
//载入字符表中的字符串并显示
CString str;
str.LoadString(IDS_ASK_CHECK_PWD_ONSERVER);
if(MessageBox(str,NULL,MB_YESNO|MB_DEFBUTTON2)==IDNO)
{
//清空密码编辑框,并将焦点转移到该编辑框
m_EditPwd.SetWindowText("");
m_EditPwd.SetFocus();
return;
}
//读取文件m_userID\config.dat并通过其中的内容获得服务器IP和端口信息
if(!file.Open(m_userID+USERSETUP,CFile::modeRead))
{
//如果无法打开文件,则使用默认值设置ip和端口
CSetupServerDlg dlg;
dlg.m_strServerIP=DEFAULT_SERVER_IP;
dlg.m_port=DEFAULT_SERVER_PORT;
if(dlg.DoModal()==IDCANCEL)
{
CDialog::OnCancel();
return;
}
uServerIP=dlg.uServerIP;
uPort=dlg.uPort;
//读取文件内容
file.Open(m_userID+USERSETUP,CFile::modeCreate|CFile::modeWrite);
file.Write(&uServerIP,sizeof(DWORD));
file.Write(&uPort,sizeof(DWORD));
file.Close();
}
else
{
//读取文件内容
file.Read(&uServerIP,sizeof(DWORD));
file.Read(&uPort,sizeof(DWORD));
file.Close();
}
CMsgModifyPwd msg;
msg.index=HAVE_ID_LOGIN;
msg.MyId=uCurID;
m_EditPwd.GetWindowText(msg.OldPwd);
msg.tarIP=uServerIP;
msg.nPort=uPort;
pwd=msg.OldPwd;
//发送数据
CClientApp* pApp=(CClientApp*)AfxGetApp();
pApp->m_Socket.SendDataDirect(&msg);
SetTimer(1,400,NULL);
BeginWaitCursor();
}
void CLoginDlg::SetUserID(CArray<int,int> &aID)
{
CString buf;
for(int i=aID.GetSize()-1;i>=0;i--)
{
buf.Format("%d",aID.GetAt(i));
m_aID.Add(buf);
}
}
void CLoginDlg::OnTimer(UINT nIDEvent)
{
if(nIDEvent==1)
{
EndWaitCursor();
KillTimer(1);
CString str;
str.LoadString(IDS_SERVER_NOT_RES);
MessageBox(str);
CDialog::OnCancel();
}
}
//接收信息
LRESULT CLoginDlg::ProcRecv(WPARAM wParam,LPARAM lParam)
{
CData* pData=(CData*)wParam;
if(pData->index==RE_LOGIN_INFO)
{
CMsg3 msg;
CopyDataBuf(&msg,pData);
if(msg.LoadFromBuf())
{
KillTimer(1);
EndWaitCursor();
if(msg.Value==2)
{
CDialog::OnOK();
}
else if(msg.Value==1)
{
CString str;
str.LoadString(IDS_PWD_ERROR);
MessageBox(str);
CDialog::OnCancel();
}
else
{
CString str;
str.LoadString(IDS_ID_NOT_EXIST);
MessageBox(str);
CDialog::OnCancel();
}
}
}
delete pData;
return 0;
}
void CLoginDlg::OnUserRegistr()
{
lresult=1;
CDialog::OnOK();
}
BOOL CLoginDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//将输入焦点放置到用户名编辑框中
GetDlgItem(ID_USERID)->SetFocus();
return FALSE;
}
void CLoginDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CLoginDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -