📄 logindialog.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 + -