⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logindlg.cpp

📁 仿QQ的聊天程序vc++/mfc来学习的简易聊天室代码功能较全
💻 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 + -