www.gusucode.com > 基于VC++的局域网视频聊天系统源码程序 > 基于VC++的局域网视频聊天系统源码程序/code/ChatClient/LoginDlg.cpp

    // LoginDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ChatClient.h"
#include "LoginDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#include "ChatClientDlg.h"
/////////////////////////////////////////////////////////////////////////////
// CLoginDlg dialog


CLoginDlg::CLoginDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CLoginDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CLoginDlg)
	m_dlgMain = (CChatClientDlg *)pParent;
	m_szLoginID = _T("");
	m_szLoginPWD = _T("");
	//}}AFX_DATA_INIT
}


void CLoginDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLoginDlg)
	DDX_Control(pDX, IDC_IPADDR2, m_LocalIPAddress);
	DDX_Control(pDX, IDC_IPADDR, m_ctrlIPAddr);
	DDX_Text(pDX, IDC_LOGIN_ID, m_szLoginID);
	DDX_Text(pDX, IDC_LOGIN_PWD, m_szLoginPWD);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLoginDlg, CDialog)
	//{{AFX_MSG_MAP(CLoginDlg)
	ON_BN_CLICKED(IDC_LOGINBT_EXIT, OnLoginbtExit)
	ON_BN_CLICKED(IDC_LOGINBT_LGOIN, OnLoginbtLgoin)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

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

//界面初始化操作
BOOL CLoginDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here	
	
	struct hostent * shHostInfo;//主机信息结构体
	char szHostName[128];//主机名

	/*对界面IP地址控件和昵称控件初始化*/

	gethostname(szHostName,128);// 获得主机名

	/*if语句由主机名得主机信息结构体,从而对获得32位IP地址*/
	if( (shHostInfo = gethostbyname(szHostName)) != NULL ) //由主机名得主机信息
	{
		//得到主机信息后对IP地址赋值
		bIp[0] = ((struct in_addr *)shHostInfo->h_addr_list[0])->S_un.S_un_b.s_b1;
		bIp[1] = ((struct in_addr *)shHostInfo->h_addr_list[0])->S_un.S_un_b.s_b2;
		bIp[2] = ((struct in_addr *)shHostInfo->h_addr_list[0])->S_un.S_un_b.s_b3;
		bIp[3] = ((struct in_addr *)shHostInfo->h_addr_list[0])->S_un.S_un_b.s_b4;
	}
	else 
		//失败
		return  FALSE;
	//对IP地址控件赋值
	m_ctrlIPAddr.SetAddress(bIp[0],bIp[1],bIp[2],bIp[3]);
	m_LocalIPAddress.SetAddress(bIp[0],bIp[1],bIp[2],bIp[3]);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//重定义回车键和ESC键
BOOL CLoginDlg::PreTranslateMessage(MSG* pMsg) 
{
	// TODO: Add your specialized code here and/or call the base class
	if(pMsg->message==WM_KEYDOWN)   
	{   
         switch(pMsg->wParam)   
         {   
         case   VK_RETURN:		//回车键
			 OnLoginbtLgoin();
			 return true;
         case   VK_ESCAPE:		//ESC键
			 return true;   
         }   
	} 
	return CDialog::PreTranslateMessage(pMsg);
}


//登陆窗口退出后返回整形-1;
void CLoginDlg::OnLoginbtExit() 
{
	// TODO: Add your control notification handler code here
	EndDialog(-1);
}

//登陆窗口点击登陆按键后的方法
void CLoginDlg::OnLoginbtLgoin() 
{
	// TODO: Add your control notification handler code here
	UpdateData(TRUE);	//数据从窗口传入变量

	//检查用户名是否合法
	if(m_szLoginID.GetLength() < 2 || m_szLoginID.GetLength() > 17)
	{
		MessageBox("用户名必须在2~17位之间","提示",MB_OK);
		return;
	}

	//检查密码位数是否合法
	if(m_szLoginPWD.GetLength() < 6 || m_szLoginPWD.GetLength() > 15)
	{
		MessageBox("密码不合法,密码必须在6~15位之间","提示",MB_OK);
		return;
	}
	//检查IP地址是否合法
	m_ctrlIPAddr.GetAddress(bIp[0],bIp[1],bIp[2],bIp[3]);
	m_dlgMain->m_szServerIP.Format("%d.%d.%d.%d",bIp[0],bIp[1],bIp[2],bIp[3]);
	m_LocalIPAddress.GetAddress(bIp[0],bIp[1],bIp[2],bIp[3]);
	m_dlgMain->m_szLocalIP.Format("%d.%d.%d.%d",bIp[0],bIp[1],bIp[2],bIp[3]);

/*	for (int i = 0 ; i <= 4 ; i++)
	{
		if( bIp[i] == 0 )
		{
			MessageBox("IP地址不合法","提示",MB_OK);
			return;
		}
	}
*/
	//用户名和密码,服务器IP传给主对话框CChatClientDlg;
	m_dlgMain->m_szID = m_szLoginID;
	m_dlgMain->m_szPWD = m_szLoginPWD;
	
	EndDialog(1);
}