SubNetDlg.cpp
上传用户:qiye66692
上传日期:2022-04-25
资源大小:72k
文件大小:3k
源码类别:

SNMP编程

开发平台:

Visual C++

  1. // SubNetDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "NetFinder.h"
  5. #include "SubNetDlg.h"
  6. #include ".subnetdlg.h"
  7. #include ".func.h"
  8. #include ".Msg.h"
  9. #include ".Host.h"
  10. // CSubNetDlg 对话框
  11. IMPLEMENT_DYNAMIC(CSubNetDlg, CDialog)
  12. CSubNetDlg::CSubNetDlg(CWnd* pParent /*=NULL*/)
  13. : CDialog(CSubNetDlg::IDD, pParent)
  14. , m_subNet(_T("0.0.0.0"))
  15. , m_ip(_T(""))
  16. , m_mask(_T(""))
  17. , m_community(_T(""))
  18. {
  19. bInSearching = FALSE;
  20. m_pThread = NULL;
  21. }
  22. CSubNetDlg::~CSubNetDlg()
  23. {
  24. }
  25. BOOL CSubNetDlg::OnInitDialog()
  26. {
  27. CDialog::OnInitDialog();
  28. m_StopEvent.ResetEvent();
  29. m_ExitEvent.ResetEvent();
  30. m_imageList.Create( 16, 16, ILC_COLOR4, 1, 0 );
  31. HICON hIcon = ::AfxGetApp()->LoadIcon(IDI_HOST);
  32. m_imageList.SetBkColor( COLORREF RGB(255,255,255) );
  33. m_imageList.Add( hIcon );
  34. m_list.SetImageList( &m_imageList, LVSIL_SMALL );
  35. m_list.InsertColumn( 0, "主机", LVCFMT_LEFT, 100 );
  36. m_list.InsertColumn( 1, "系统描述(如果支持SNMP协议)", LVCFMT_LEFT, 400 );
  37. m_progress.SetRange( 1, 254 );
  38. m_progress.SetStep( 1 );
  39. m_progress.SetPos( 0 );
  40. DWORD dNetMask = inet_addr(m_mask);
  41. DWORD dNetAddr = inet_addr(m_ip);
  42. dNetMask = ntohl(dNetMask);
  43. dNetAddr = ntohl(dNetAddr);
  44. DWORD dSubNet = dNetAddr & dNetMask;
  45. BYTE *byte = (BYTE *)&dSubNet;
  46. m_subNet.Format("%d.%d.%d.%d", //设置子网
  47. (int)byte[3], (int)byte[2], (int)byte[1], (int)byte[0]);
  48. UpdateData( FALSE );
  49. return TRUE;    // set focus to first one
  50. }
  51. void CSubNetDlg::DoDataExchange(CDataExchange* pDX)
  52. {
  53. CDialog::DoDataExchange(pDX);
  54. DDX_Text(pDX, IDC_IP_STATIC, m_subNet);
  55. DDX_Control(pDX, IDC_PROGRESS, m_progress);
  56. DDX_Control(pDX, IDC_LIST, m_list);
  57. }
  58. BEGIN_MESSAGE_MAP(CSubNetDlg, CDialog)
  59. ON_BN_CLICKED(IDC_SEARCH_BUTTON, OnBnClickedSearchButton)
  60. ON_MESSAGE(MSG_FOUND_HOST, OnFoundHost)
  61. ON_WM_DESTROY()
  62. END_MESSAGE_MAP()
  63. // CSubNetDlg 消息处理程序
  64. void CSubNetDlg::OnBnClickedSearchButton()
  65. {
  66. // TODO: 在此添加控件通知处理程序代码
  67. if( bInSearching == FALSE )
  68. {
  69. m_list.DeleteAllItems();
  70. bInSearching = TRUE;
  71. m_progress.SetPos( 0 );
  72. GetDlgItem(IDC_SEARCH_BUTTON)->SetWindowText("停止");
  73. m_StopEvent.ResetEvent();
  74. m_pThread = AfxBeginThread( PingHost, this ); //新开线程,开始ping主机
  75. }
  76. else
  77. {
  78. bInSearching = FALSE;
  79. if(m_pThread != NULL) {
  80. ::TerminateThread(m_pThread->m_hThread, 0);
  81. m_pThread = NULL;
  82. MessageBox(_T("搜索线程被终止!"));
  83. }
  84. m_progress.SetPos(0);
  85. GetDlgItem(IDC_SEARCH_BUTTON)->SetWindowText("开始搜索");
  86. m_StopEvent.SetEvent();
  87. }
  88. }
  89. LRESULT CSubNetDlg::OnFoundHost(WPARAM wParam, LPARAM lParam)
  90. {
  91. int index = m_list.InsertItem( wParam, m_host.m_strHostIp );
  92. m_list.SetItemText(index, 1, m_host.m_strHostDescr); 
  93. return 0L;
  94. }
  95. void CSubNetDlg::OnDestroy()
  96. {
  97. CDialog::OnDestroy();
  98. // TODO: 在此处添加消息处理程序代码
  99. if(this->m_pThread != NULL) {
  100. ::TerminateThread(m_pThread->m_hThread, 0);
  101. m_pThread = NULL;
  102. }
  103. //if( bInSearching == TRUE )
  104. //{
  105. // m_StopEvent.SetEvent();
  106. // WaitForSingleObject( m_ExitEvent.m_hObject, INFINITE );
  107. //}
  108. }