AddUserDlg1.cpp
上传用户:sdxhgc
上传日期:2013-09-14
资源大小:388k
文件大小:6k
源码类别:

通讯编程

开发平台:

Visual C++

  1. // AddUserDlg1.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "vc_demo.h"
  5. #include "AddUserDlg1.h"
  6. #include <winsock2.h>
  7. #include "MainFrm.h"
  8. #include "wcomm_dll.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CAddUserDlg dialog
  16. CAddUserDlg::CAddUserDlg(CWnd* pParent /*=NULL*/)
  17. : CDialog(CAddUserDlg::IDD, pParent)
  18. {
  19. //{{AFX_DATA_INIT(CAddUserDlg)
  20. m_edit1 = _T("");
  21. //}}AFX_DATA_INIT
  22. }
  23. void CAddUserDlg::DoDataExchange(CDataExchange* pDX)
  24. {
  25. CDialog::DoDataExchange(pDX);
  26. //{{AFX_DATA_MAP(CAddUserDlg)
  27. DDX_Control(pDX, IDC_DATETIMEPICKER2, m_time);
  28. DDX_Control(pDX, IDC_COMBO3, m_dscport);
  29. DDX_Control(pDX, IDC_COMBO2, m_dtuport);
  30. DDX_Control(pDX, IDC_COMBO1, m_status);
  31. DDX_Control(pDX, IDC_DATETIMEPICKER1, m_date);
  32. DDX_Control(pDX, IDC_IPADDRESS2, m_dscip);
  33. DDX_Control(pDX, IDC_IPADDRESS1, m_dtuip);
  34. DDX_Control(pDX, IDC_EDIT1, m_userid);
  35. DDX_Text(pDX, IDC_EDIT1, m_edit1);
  36. DDV_MaxChars(pDX, m_edit1, 11);
  37. //}}AFX_DATA_MAP
  38. }
  39. BEGIN_MESSAGE_MAP(CAddUserDlg, CDialog)
  40. //{{AFX_MSG_MAP(CAddUserDlg)
  41. ON_BN_CLICKED(IDOK, OnAdduserB)
  42. //}}AFX_MSG_MAP
  43. END_MESSAGE_MAP()
  44. /////////////////////////////////////////////////////////////////////////////
  45. // CAddUserDlg message handlers
  46. BOOL CAddUserDlg::OnInitDialog() 
  47. {
  48. CDialog::OnInitDialog();
  49. // TODO: Add extra initialization here
  50. //给窗口添加自定义图标
  51. HICON hIcon=LoadIcon (AfxGetInstanceHandle(),MAKEINTRESOURCE(IDI_Adduser));
  52. SetIcon(hIcon,TRUE);
  53. //初始化登录时间控件
  54. CTime stime( 2000, 01, 01, 01, 01, 01 ); 
  55. CTime etime( 2030, 12, 31, 23, 59, 59 ); 
  56. m_date.SetFormat("yyyy-MM-dd HH:mm:ss");
  57. m_date.SetRange(&stime,&etime);
  58. m_date.SetTime(&CTime::GetCurrentTime ());
  59. m_time.SetFormat("yyyy-MM-dd HH:mm:ss");
  60. m_time.SetRange(&stime,&etime);
  61. m_time.SetTime(&CTime::GetCurrentTime ());
  62. //初始化端口与在线状态控件
  63. m_dtuport.SetWindowText ("5001");
  64. m_dscport.SetWindowText ("5002");
  65. m_status.SelectString (0,"在线");
  66. //初始化IP地址控件
  67. CString str1;
  68. str1=GetLocalIP();
  69. m_dtuip.SetWindowText (str1);
  70. m_dscip.SetWindowText (str1);
  71. return TRUE;  // return TRUE unless you set the focus to a control
  72.               // EXCEPTION: OCX Property Pages should return FALSE
  73. }
  74. void CAddUserDlg::PostNcDestroy() 
  75. {
  76. // TODO: Add your specialized code here and/or call the base class
  77.     delete this;
  78. }
  79. void CAddUserDlg::IPHightToLower(const char *IPstr, char *ipaddrstr)
  80. {
  81. CString iparry[4];
  82. int i;
  83. int m=0,n;
  84. CString ipaddr;
  85.     
  86. iparry[m].Empty ();
  87. ipaddr.Empty ();
  88. n=strlen(IPstr);
  89.     for(i=0; i<n; ++i)
  90. {
  91.         if(*IPstr == '.')
  92. {
  93. ++m;
  94. iparry[m].Empty ();
  95. }
  96. else
  97. {
  98. iparry[m] += *IPstr;
  99. }
  100. IPstr++;
  101. }
  102. ipaddr=iparry[3];
  103. ipaddr+='.';
  104. ipaddr+=iparry[2];
  105. ipaddr+='.';
  106. ipaddr+=iparry[1];
  107. ipaddr+='.';
  108. ipaddr+=iparry[0];
  109.     strcpy(ipaddrstr,(LPSTR)(LPCTSTR)ipaddr);
  110. return ;
  111. }
  112. CString CAddUserDlg::GetLocalIP()
  113. {
  114. char szHostname[100]; 
  115.     CString str1="",str2;
  116. struct hostent *pHostEnt;
  117. memset(szHostname,0,100);
  118. if( gethostname (szHostname, sizeof( szHostname ))!=SOCKET_ERROR) 
  119. //取本机的名称成功后,再根据名字取IP地址
  120.   pHostEnt = gethostbyname(szHostname); 
  121.       if ( pHostEnt != NULL ) 
  122.   { 
  123.   for(int i=0 ; pHostEnt->h_addr_list[i]!=NULL ; i++)
  124.   {
  125.   //转换IP地址为"xxx.xxx.xxx.xxx"形式的IP地址字符串
  126. for(int j=0 ; j<pHostEnt->h_length ; j++)
  127. {
  128. if( j>0 )
  129. {
  130. str1+=".";
  131. }//end if
  132. str2.Format ("%u",
  133. (unsigned int)((unsigned char*)pHostEnt->h_addr_list[i])[j]);
  134. str1+=str2;
  135. }//end for
  136. break;
  137.   }//end for
  138.   return str1;            
  139.   } 
  140.   else
  141.   {
  142.   //取不到本机的IP地址,返回空字符串
  143.   return str1;  
  144.   }//end if
  145. else
  146. {
  147. //取不到本机的名字,返回空字符串
  148. return str1;
  149. }//end if
  150. }
  151. void CAddUserDlg::OnAdduserB() 
  152. {
  153. // TODO: Add your control notification handler code here
  154. int i;
  155. user_info userinfo;
  156. CString userid,logondate;
  157. CString updatestr;
  158. char dscip[17];
  159. char dtuip[17];
  160. char *iptmp;
  161. char port[10];
  162. CString str1[7];
  163. CMainFrame* pFram=(CMainFrame*)AfxGetMainWnd ();   //取主框架的句柄
  164. userid.Empty ();
  165. m_userid.GetWindowText (userid);
  166. if((!userid.IsEmpty ()) && (userid.GetLength ()==11))   //检查用户ID的有效性规则
  167. {
  168. //检查通过,则赋值
  169. memset(userinfo.m_userid ,0,12);
  170. memcpy(userinfo.m_userid ,(LPSTR)(LPCTSTR)userid, userid.GetLength());
  171. iptmp=new char[17];
  172. memset(dscip,0,17);
  173. memset(dtuip,0,17);
  174. memset(iptmp,0,17);
  175. memset(port,0,10);
  176. //给sinaddr赋值
  177. m_dscip.GetWindowText (dscip,17);
  178. IPHightToLower(dscip, iptmp);  //IP地址高低位反向
  179. userinfo.m_sin_addr  =inet_addr(iptmp);//将字符串形式的IP地址转为unsigned long类型
  180. //给localaddr赋值
  181. m_dtuip.GetWindowText (dtuip,17);
  182. IPHightToLower(dtuip, iptmp);
  183. userinfo.m_local_addr  =inet_addr(iptmp);
  184. //给sinport赋值
  185. m_dscport.GetWindowText (port,10);
  186. userinfo.m_sin_port =atoi(port);
  187. //给localport赋值
  188. memset(port,0,10);
  189. m_dtuport.GetWindowText (port,10);
  190. userinfo.m_local_port =atoi(port);
  191. //给logondate赋值
  192. logondate.Empty ();
  193. m_date.GetWindowText (logondate);
  194. memset(userinfo.m_logon_date ,0,20);
  195. memcpy(userinfo.m_logon_date ,(LPSTR)(LPCTSTR)logondate, logondate.GetLength());
  196. //给updatetime赋值
  197. updatestr.Empty ();
  198. m_time.GetWindowText (updatestr);
  199. memset(userinfo.m_update_time ,0,20);
  200.         CTime update(atoi((LPSTR)(LPCTSTR)updatestr.Mid (0,4)),
  201.          atoi((LPSTR)(LPCTSTR)updatestr.Mid (5,2)),
  202.  atoi((LPSTR)(LPCTSTR)updatestr.Mid (8,2)),
  203.  atoi((LPSTR)(LPCTSTR)updatestr.Mid (11,2)),
  204.  atoi((LPSTR)(LPCTSTR)updatestr.Mid (14,2)),
  205.  atoi((LPSTR)(LPCTSTR)updatestr.Mid (17,4)));
  206. *((time_t *)userinfo.m_update_time) =update.GetTime ();
  207. //取在线状态
  208. userinfo.m_status =1;
  209. //调用控件添加用户接口
  210. //i=AddOneUser(&userinfo);
  211. i=add_one_user(&userinfo);
  212. pFram->RefreshUserTable (0);
  213. delete []iptmp;
  214. }
  215. else
  216. {
  217. //检查失败,给出告警提示
  218. AfxMessageBox ("用户ID不能为空或输入长度不正确!",0,0);
  219. }
  220. }
  221. void CAddUserDlg::OnCancel() 
  222. {
  223. // TODO: Add extra cleanup here
  224. CMainFrame* pFram=(CMainFrame*)AfxGetMainWnd ();
  225.     pFram->m_IsAdduserDlg =FALSE;
  226. CDialog::OnCancel();
  227. }