www.gusucode.com > 改函数包包装了GPRS通信的接口源码程序 > 改函数包包装了GPRS通信的接口源码程序/GPRS开发包/VC_DEMO_源代码/AdduserDlg.cpp

    // AdduserDlg.cpp : implementation file
//

#include "stdafx.h"
#include "vc_demo.h"
#include "AdduserDlg.h"
#include "MainFrm.h"
#include <winsock2.h>
#include "wcomm_dll.h"

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

/////////////////////////////////////////////////////////////////////////////
// CAdduserDlg dialog


CAdduserDlg::CAdduserDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CAdduserDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CAdduserDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CAdduserDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAdduserDlg)
	DDX_Control(pDX, IDC_DATETIMEPICKER1, m_date);
	DDX_Control(pDX, IDC_COMBO3, m_dscport);
	DDX_Control(pDX, IDC_COMBO2, m_dtuport);
	DDX_Control(pDX, IDC_COMBO1, m_status);
	DDX_Control(pDX, IDC_IPADDRESS2, m_dscip);
	DDX_Control(pDX, IDC_IPADDRESS1, m_dtuip);
	DDX_Control(pDX, IDC_EDIT1, m_userid);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CAdduserDlg, CDialog)
	//{{AFX_MSG_MAP(CAdduserDlg)
	ON_BN_CLICKED(IDOK, OnAddUserB)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAdduserDlg message handlers

BOOL CAdduserDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	HICON hIcon=LoadIcon (AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_AddUser));
	SetIcon(hIcon,TRUE);

	//初始化登录时间控件
	CTime stime=CTime::GetCurrentTime (); 
	CTime etime( 2030, 12, 31, 23, 59, 59 ); 
	m_date.SetFormat("yyyy/MM/dd HH:mm:ss");
	m_date.SetRange(&stime,&etime);
	m_date.SetTime(&stime);

	//初始化端口与在线状态控件
	m_dtuport.SetWindowText ("5001");
	m_dscport.SetWindowText ("5002");
	m_status.SelectString (1,"在线");

	//初始化IP地址控件
	CString str1;
	str1=GetLocalIP();
	m_dtuip.SetWindowText (str1);
	m_dscip.SetWindowText (str1);
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CAdduserDlg::PostNcDestroy() 
{
	// TODO: Add your specialized code here and/or call the base class
	
    delete this;
}

void CAdduserDlg::OnCancel() 
{
	// TODO: Add extra cleanup here
	CMainFrame* pFram=(CMainFrame*)AfxGetMainWnd ();
    pFram->m_IsAdduserDlg =FALSE;	
	CDialog::OnCancel();
}

CString CAdduserDlg::GetLocalIP()
{
	char szHostname[100]; 
    CString str1="",str2;
	struct hostent *pHostEnt;

	memset(szHostname,0,100);

	if( gethostname (szHostname, sizeof( szHostname ))!=SOCKET_ERROR) 
	{ 
		//取本机的名称成功后,再根据名字取IP地址
		  pHostEnt = gethostbyname(szHostname); 
	      if ( pHostEnt != NULL ) 
		  { 
			  for(int i=0 ; pHostEnt->h_addr_list[i]!=NULL ; i++)
			  {
				  //转换IP地址为"xxx.xxx.xxx.xxx"形式的IP地址字符串
				for(int j=0 ; j<pHostEnt->h_length ; j++)
				{
					if( j>0 )
					{
						str1+=".";
					}//end if
					str2.Format ("%u",
					(unsigned int)((unsigned char*)pHostEnt->h_addr_list[i])[j]);

					str1+=str2;
				}//end for

			  }//end for

			  return str1;            
		  } 
		  else
		  {
			  //取不到本机的IP地址,返回空字符串
			  return str1;  
		  }//end if
	} 
	else
	{
		//取不到本机的名字,返回空字符串
		return str1;
	}//end if

}

void CAdduserDlg::IPHightToLower(const char *IPstr, char *ipaddrstr)
{
	CString iparry[4];
	int i;
	int m=0,n;
	CString ipaddr;
    
	iparry[m].Empty ();
	ipaddr.Empty ();
	n=strlen(IPstr);
    for(i=0; i<n; ++i)
	{
        if(*IPstr == '.')
		{
			++m;
			iparry[m].Empty ();
		}
		else
		{
			iparry[m] += *IPstr;
		}
		IPstr++;
	}

	ipaddr=iparry[3];
	ipaddr+='.';
	ipaddr+=iparry[2];
	ipaddr+='.';
	ipaddr+=iparry[1];
	ipaddr+='.';
	ipaddr+=iparry[0];

    strcpy(ipaddrstr,(LPSTR)(LPCTSTR)ipaddr);
	return ;

}

void CAdduserDlg::OnAddUserB() 
{
	// TODO: Add your control notification handler code here
	int j;
	int count,i;
    user_info userinfo;
	CString userid,logondate;
	char dscip[17];
	char dtuip[17];
	char *iptmp;
	char port[10];
	char a[3];
	VARIANT sinaddr,localaddr;
	short sinport,localport;
	CString str1[7];
	char puserid[12];
	CMainFrame* pFram=(CMainFrame*)AfxGetMainWnd ();   //取主框架的句柄

	memset(puserid,0,12);
	userid.Empty ();
	m_userid.GetWindowText (userid);
	if((!userid.IsEmpty ()) && (userid.GetLength ()==11))   //检查用户ID的有效性规则
	{
		//检查通过,则赋值
        memset(userinfo.m_userid ,0 ,12);
		memcpy(userinfo.m_userid ,(LPSTR)(LPCTSTR)userid ,userid.GetLength ());

		iptmp=new char[17];
		memset(dscip,0,17);
		memset(dtuip,0,17);
		memset(iptmp,0,17);
		memset(port,0,10);

		//给sinaddr赋值
		m_dscip.GetWindowText (dscip,17);
		IPHightToLower(dscip, iptmp);  //IP地址高低位反向
		userinfo.m_sin_addr  =inet_addr(iptmp);//将字符串形式的IP地址转为unsigned long类型

		//给localaddr赋值
		m_dtuip.GetWindowText (dtuip,17);
		IPHightToLower(dtuip, iptmp);
		userinfo.m_local_addr  =inet_addr(iptmp);

		//给sinport赋值
		m_dscport.GetWindowText (port,10);
		userinfo.m_sin_port =atoi(port);

		//给localport赋值
		memset(port,0,10);
		m_dtuport.GetWindowText (port,10);
		userinfo.m_local_port =atoi(port);

		//给logondate赋值
		logondate.Empty ();
		m_date.GetWindowText (logondate);
        memset(userinfo.m_logon_date ,0,20);
		memcpy(userinfo.m_logon_date ,(LPSTR)(LPCTSTR)logondate,logondate.GetLength ());

		//取在线状态
		userinfo.m_status =m_status.GetCurSel();

		//调用控件添加用户接口
		i=AddOneUser(&userinfo);

		pFram->RefreshUserTable (0);
		UpdateData (FALSE);
		delete []iptmp;
	}
	else
	{
		//检查失败,给出告警提示
		AfxMessageBox ("用户ID不能为空或输入长度不正确!",0,0);
	}
}