www.gusucode.com > 一个比较完整的VC++仿QQ聊天源码源码程序 > 一个比较完整的VC++仿QQ聊天源码/fakeQQ/fakeQQ/LoginDlg.cpp

    // LoginDlg.cpp : implementation file
// Download by http://www.codesc.net

#include "stdafx.h"
#include "fakeqq.h"
#include "LoginDlg.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)
	//}}AFX_DATA_INIT
	
	m_LocalIp = ::GetLocalIp();
}


void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLoginDlg)
	DDX_Control(pDX, IDC_FACE_LIST, m_FaceList);
	DDX_Control(pDX, IDC_USER_FACE, m_UserFace);
	DDX_Text(pDX, IDC_LOGIN_NAME, m_LoginName);
	DDX_Text(pDX, IDC_UDP_PORT, m_UdpPort);
	DDX_Text(pDX, IDC_LOCAL_IP, m_LocalIp);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
//{{AFX_MSG_MAP(CLoginDlg)
ON_CBN_SELCHANGE(IDC_FACE_LIST, OnSelchangeFaceList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLoginDlg message handlers

void CLoginDlg::OnSelchangeFaceList() 
{
	int nItem = m_FaceList.GetCurSel();
	if(nItem == LB_ERR)
	{
		m_UserFace.SetIcon(NULL);
	}
	else
	{
		m_UserFace.SetIcon(::FaceIcon[nItem]);
	}
}

BOOL CLoginDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	//读注册表
	DWORD Size = 20;
	TCHAR Values[20];
	CRegKey RegKey;
	
	if(RegKey.Open(HKEY_LOCAL_MACHINE,"Software\\BlueJoe\\FakeQQ") == ERROR_SUCCESS)
	{
		if(RegKey.QueryValue(Values, "Login Name", &Size)  ==ERROR_SUCCESS)
			m_LoginName = Values;
		
		Size = 20;
		if(RegKey.QueryValue(Values, "User Face", &Size)  ==ERROR_SUCCESS)
		{
			CString UserFace = Values;
			int nUserFace = atoi(UserFace);
			m_FaceList.SetCurSel(nUserFace);
			m_UserFace.SetIcon(::FaceIcon[nUserFace]);
		}
		
		Size = 20;
		if(RegKey.QueryValue(Values, "UDP Port", &Size)  ==ERROR_SUCCESS)
		{
			CString UdpPort = Values;
			m_UdpPort = atoi(UdpPort);
		}
	}
	else
	{
		gethostname(Values, 20);
		m_LoginName = Values;
		m_FaceList.SetCurSel(0);
		m_UdpPort = 40000;
	}
	
	UpdateData(false);
	return TRUE;  // return TRUE unless you set the focus to a control
	// EXCEPTION: OCX Property Pages should return FALSE
}

void CLoginDlg::OnOK() 
{
	// TODO: Add extra validation here
	UpdateData(true);
	
	::MyInfo.m_Face = m_FaceList.GetCurSel();
	::MyInfo.m_Port = m_UdpPort;
	strcpy(::MyInfo.m_Ip, m_LocalIp);
	strcpy(::MyInfo.m_UserName, m_LoginName);
	
	if(!::ChatSocket.Create(m_UdpPort, SOCK_DGRAM))
		AfxMessageBox("无法创建Socket,请确认端口号没有冲突。");
	else
	{
		//写注册表
		CRegKey RegKey;
		RegKey.SetValue(HKEY_LOCAL_MACHINE,
			"Software\\BlueJoe\\FakeQQ", ::MyInfo.m_UserName, "Login Name");
		
		CString UserFace;
		UserFace.Format("%d", ::MyInfo.m_Face);
		RegKey.SetValue(HKEY_LOCAL_MACHINE,
			"Software\\BlueJoe\\FakeQQ", UserFace, "User Face");
		
		CString UdpPort;
		UdpPort.Format("%d", ::MyInfo.m_Port);
		RegKey.SetValue(HKEY_LOCAL_MACHINE,
			"Software\\BlueJoe\\FakeQQ", UdpPort, "UDP Port");
		
		CDialog::OnOK();
	}
}