2.3.2 具体编码(1)
设计界面完毕后,开始步入正式编码阶段。
(1) 定义函数OnInitDialog(),用于实现界面初始化工作。具体代码如下:
- BOOL CNBTSTATDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- SetIcon(m_hIcon, TRUE);
- SetIcon(m_hIcon, FALSE);
- m_IPEdit1.SetAddress(210,28,128,1); //设置IP地址默认范围
- m_IPEdit2.SetAddress(210,28,143,255);
- wait_handle = CreateEvent(NULL,true,false,"receive data"); //创建处于非触
- //发状态的事件。类型为手动
- GetDlgItem(IDC_BTN_EXIT)->EnableWindow(false);
- m_spin.SetRange(100, 10000);
- m_spin.SetPos(100);
- // -----------------ListView 初始化---------------------
- DWORD dwStyle = GetWindowLong(m_ListView.GetSafeHwnd(), GWL_STYLE);
- dwStyle &= ~LVS_TYPEMASK;
- dwStyle |= LVS_REPORT;
- SetWindowLong(m_ListView.GetSafeHwnd(), GWL_STYLE, dwStyle);
- m_ListView.InsertColumn(0, "MAC地址", LVCFMT_LEFT, 120);
- m_ListView.InsertColumn(0, "用户\\其他", LVCFMT_LEFT, 100);
- m_ListView.InsertColumn(0, "主机", LVCFMT_LEFT, 80);
- m_ListView.InsertColumn(0, "工作组", LVCFMT_LEFT, 80);
- m_ListView.InsertColumn(0, "IP地址", LVCFMT_LEFT, 100);
- m_ListView.SetExtendedStyle(LVS_EX_GRIDLINES);
- ::SendMessage(m_ListView.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
- LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
- return TRUE; // return TRUE unless you set the focus to a control
- }
(2) 编写函数OnBtnSend(),用于创建扫描线程,启动扫描工作。具体代码如下: - void CNBTSTATDlg::OnBtnSend()
- {
- //从IP控件得到要查询的IP范围
- m_IPEdit1.GetAddress(B1[0], B1[1], B1[2], B1[3]);
- m_IPEdit2.GetAddress(B2[0], B2[1], B2[2], B2[3]);
- //判断IP范围是否合法
- if(B2[2] < B1[2])
- { AfxMessageBox("终止地址应大于起始地址!"); return; }
- else if(B2[2]==B1[2] && B2[3]<B1[3])
- { AfxMessageBox("终止地址应大于起始地址!"); return; }
- if(B2[0]!=B1[0] || B2[1]!=B1[1])
- { AfxMessageBox("不支持A类或B类网!"); return; }
- //设置相关按钮状态
- GetDlgItem(IDC_BTN_SEND)->EnableWindow(false);
- GetDlgItem(IDC_EDIT1)->EnableWindow(false);
- GetDlgItem(IDC_SPIN1)->EnableWindow(false);
- GetDlgItem(IDC_IPADDRESS1)->EnableWindow(false);
- GetDlgItem(IDC_IPADDRESS2)->EnableWindow(false);
- GetDlgItem(IDC_BTN_EXIT)->EnableWindow(true);
- //启动线程
- AfxBeginThread(NbtstatThread, this->GetSafeHwnd(),
- THREAD_PRIORITY_NORMAL);
- }