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

📄 logindialog.cpp

📁 是一个基于热血战国协议的网络游戏。现在脱机客户端先放出来给大家研究
💻 CPP
字号:
// LoginDialog.cpp : 实现文件
//

#include "stdafx.h"
#include "ZhanGuoClient.h"
#include "LoginDialog.h"


// CLoginDialog 对话框

IMPLEMENT_DYNAMIC(CLoginDialog, CDialog)

CLoginDialog::CLoginDialog(CWnd* pParent /*=NULL*/)
	: CDialog(CLoginDialog::IDD, pParent)
{

}

CLoginDialog::~CLoginDialog()
{
}

void CLoginDialog::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_LIST1, m_ServerList);
	DDX_Control(pDX, IDC_EDIT1, m_ServerName);
	DDX_Control(pDX, IDC_EDIT2, m_ServerAddress);
	DDX_Control(pDX, IDC_EDIT3, m_ServerPort);
	DDX_Control(pDX, IDC_EDIT4, m_Account);
	DDX_Control(pDX, IDC_EDIT6, m_Password);
}


BEGIN_MESSAGE_MAP(CLoginDialog, CDialog)
	ON_LBN_SELCHANGE(IDC_LIST1, &CLoginDialog::OnServerChange)
	ON_BN_CLICKED(IDOK, &CLoginDialog::OnBnClickedOk)
END_MESSAGE_MAP()


// CLoginDialog 消息处理程序
//选择服务器
void CLoginDialog::OnServerChange()
{
	// TODO: 在此添加控件通知处理程序代码
	std::string str;
	char buf[1024];
	m_ServerList.GetText(m_ServerList.GetCurSel(),buf);
	str=buf;
	fCompareName obj(str);
	std::list<_TSERVER>::iterator pos=std::find_if(m_Servers.begin(),m_Servers.end(),obj);
	if(pos!=m_Servers.end())
	{
		m_ServerName.SetWindowText(pos->name.c_str());
		m_ServerAddress.SetWindowText(pos->address.c_str());
		m_ServerPort.SetWindowText(itoa(pos->port,buf,10));
	}
}

//登录游戏
void CLoginDialog::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
	std::string strTmp;
	char buf[0x1000];
	//服务器名字
	m_ServerName.GetWindowText(buf,sizeof(buf));
	ret_ServerName=buf;
	//服务器IP地址
	m_ServerAddress.GetWindowText(buf,sizeof(buf));
	ret_ServerAddress=buf;
	//服务器端口
	m_ServerPort.GetWindowText(buf,sizeof(buf));
	strTmp=buf;
	//ret_ServerPort=boost::lexical_cast<UINT>(strTmp);
	ret_ServerPort=atoi(strTmp.c_str());
	//帐号
	m_Account.GetWindowText(buf,sizeof(buf));
	ret_Account=buf;
	//密码
	m_Password.GetWindowText(buf,sizeof(buf));
	ret_Password=buf;

	//保存帐号密码
	WritePrivateProfileString("LoginDlg","Account",ret_Account.c_str(),".\\main.ini");
	WritePrivateProfileString("LoginDlg","LastServer",ret_ServerName.c_str(),".\\main.ini");

	OnOK();
}

BOOL CLoginDialog::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	//服务器
	CFile f("servers.ini",CFile::modeRead|CFile::typeBinary);
	char* buf;
	int size=f.GetLength();
	buf =new char[size+2];
	f.Read(buf,size);
	int off=0;
	int start=0;
	while(start<size)
	{
		if((buf[off]==0xd && buf[off+1]==0xa)||(off>=size))
		{
			buf[off]=(char)0;
			AddServer(buf+start);
			start=off+2;
			off=start;
		}
		off++;
	}
	delete buf;
	m_ServerList.SetCurSel(0);

	//帐号
	char strAccount[256];
	GetPrivateProfileString("LoginDlg","Account","",strAccount,256,".\\main.ini");
	m_Account.SetWindowText(strAccount);
	//密码
	char strPassword[256];
	GetPrivateProfileString("LoginDlg","Password","",strPassword,256,".\\main.ini");
	m_Password.SetWindowText(strPassword);

	//最后一次登陆的服务器
	char strLastServer[256];
	GetPrivateProfileString("LoginDlg","LastServer","",strLastServer,256,".\\main.ini");
	CString sn;
	for ( int i=0; i<m_ServerList.GetCount(); i++ )
	{
		m_ServerList.GetText(i,sn);
		if ( sn.CompareNoCase(strLastServer)==0 )
		{
			m_ServerList.SetCurSel(i);
			break;
		}
	}
	OnServerChange();

	if(strlen(strAccount)==0)
		m_Account.SetFocus();
	else
		m_Password.SetFocus();

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CLoginDialog::AddServer(char* s)
{
	const char seps[]="|";
	//xx传奇|127.0.0.1|7000
	_TSERVER server;
	char *token = strtok( s, seps );
	if( token != NULL )
	{
		server.name=token;
		token = strtok( NULL, seps );
		if( token != NULL )
		{
			server.address=token;
			token = strtok( NULL, seps );
			if( token != NULL )
			{
				server.port=atoi(token);
				token = strtok( NULL, seps );
			}
		}
	}
	fCompareName obj(server.name);
	std::list<_TSERVER>::iterator pos=std::find_if(m_Servers.begin(),m_Servers.end(),obj);
	if(pos==m_Servers.end())
	{
		m_Servers.push_back(server);//在服务器链表插入一个新的
		m_ServerList.AddString(server.name.c_str());
	}
	else
	{
		*pos=server;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -