1.4.2 具体编码(2)
(7) 编写对话框初始化函数OnInitDialog(),具体代码如下:
- BOOL CIpmonDlg::OnInitDialog()
- {
- CDialog::OnInitDialog();
- // IDM_ABOUTBOX must be in the system command range.
- ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
- ASSERT(IDM_ABOUTBOX < 0xF000);
- CMenu *pSysMenu = GetSystemMenu(FALSE);
- if (pSysMenu != NULL)
- {
- CString strAboutMenu;
- strAboutMenu.LoadString(IDS_ABOUTBOX);
- if (!strAboutMenu.IsEmpty())
- {
- pSysMenu->AppendMenu(MF_SEPARATOR);
- pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
- }
- }
- SetIcon(m_hIcon, TRUE);
- SetIcon(m_hIcon, FALSE);
- CHAR szHostName[128] = {0};
- HOSTENT *pHost = NULL;
- CHAR *pszIp = NULL;
- int iNum = 0;
- if(AfxSocketInit(NULL)==FALSE)
- {
- AfxMessageBox("Sorry, socket load error!");
- return FALSE;
- }
- if(gethostname(szHostName, 128)==0)
- {
- pHost = gethostbyname(szHostName);
- if(pHost != NULL)
- {
- pszIp = inet_ntoa(*(in_addr*)pHost->h_addr_list[iNum]);
- m_ipsource = inet_addr(pszIp);
- }
- else AfxMessageBox("pHost = NULL!");
- }
- else AfxMessageBox("can't find host name!");
- DWORD dwStyle = GetWindowLong(m_ctrList.GetSafeHwnd(), GWL_STYLE);
- dwStyle &= ~LVS_TYPEMASK;
- dwStyle |= LVS_REPORT;
- SetWindowLong(m_ctrList.GetSafeHwnd(), GWL_STYLE, dwStyle);
- m_ctrList.InsertColumn(0, "数据", LVCFMT_LEFT, 525);
- m_ctrList.InsertColumn(0, "大小", LVCFMT_LEFT, 80);
- m_ctrList.InsertColumn(0, "端口", LVCFMT_LEFT, 40);
- m_ctrList.InsertColumn(0, "目的地址", LVCFMT_LEFT, 100);
- m_ctrList.InsertColumn(0, "端口", LVCFMT_LEFT, 40);
- m_ctrList.InsertColumn(0, "源地址", LVCFMT_LEFT, 100);
- m_ctrList.InsertColumn(0, "协议", LVCFMT_LEFT, 50);
-
- ::SendMessage(m_ctrList.m_hWnd, LVM_SETEXTENDEDLISTVIEWSTYLE,
- LVS_EX_FULLROWSELECT, LVS_EX_FULLROWSELECT);
- DWORD dwSize = 0;
- GetIpAddrTable(NULL, &dwSize, FALSE);
- PMIB_IPADDRTABLE pIpAddrTable = (PMIB_IPADDRTABLE)new BYTE [dwSize];
- if(pIpAddrTable)
- {
- if(GetIpAddrTable(
- (PMIB_IPADDRTABLE)pIpAddrTable, // IP表缓冲区
- &dwSize, // 缓冲区大小
- FALSE // 根据IP地址排序
- ) == NO_ERROR)
- {
- if(pIpAddrTable->dwNumEntries > 2)
- // Second is MS TCP loopback IP (127.0.0.1)
- {
- m_Multihomed = TRUE ;
- char szIP[16];
- for(int i=0; i<(int)pIpAddrTable->dwNumEntries; i++)
- {
- in_addr ina;
- ina.S_un.S_addr = pIpAddrTable->table[i].dwAddr;
- char *pIP = inet_ntoa(ina);
- strcpy(szIP, pIP);
- if(stricmp(szIP, "127.0.0.1"))
- m_IPArr.Add(pIpAddrTable->table[i].dwAddr);
- }
- }
- }
- delete []pIpAddrTable;
- }
- return TRUE;
- }