選擇新建->項目->MFC應用程序->基於對話框完成,這裏文件名爲snifferhtml
打開資源視圖中的Dialog列表,打開項目總默認建立的話框,將對話框中的全部控件刪除,以後按照最終效果一一從工具欄中添加控件:List Control,用於顯示數據包概要信息;Tree Control,用於顯示數據包詳細信息;Edit Control,用於顯示數據包具體內容;此外還須要添加各類Static Text和Edit Control用於顯示統計量的信息。爲了美觀請根據狀況添加Group Box,這樣可使界面顯得更加有條理tcp
添加完這些控件後,須要對空間的屬性進行設置,打開屬性面板,首先將全部的Edit Control的Multiline設置爲true,表示容許多行,Read Only設置爲true,由於主對話框中的Edit Control只用來顯示統計的數據無需接受輸入。將List Control的View設置爲Report,也就是報表風格,Single Select屬性設置爲true,表示每次只容許選擇一行。Tree Control沒有什麼必需要設置的,能夠根據本身喜愛來改變風格,好比是否在每項旁邊加入+—號等。以後在資源視圖面板中右鍵->添加資源,新建一個Menu資源,在視圖中對菜單項直接編輯,好比操做中有開始捕獲,中止捕獲。選項中有選擇適配器,設置過濾規則等。再次進入屬性面板,選擇當前的主對話框,在屬性中的Menu加入剛纔新建的Menu,這樣就把菜單加入到主對話框中了,屬性中對主對話框的是設置還有加入最大最小化按鈕等,設置完這一些一個主界面的雛形就有了:函數
這裏有個技巧,在對各類控件安放的過程當中每每須要精確的對齊,當選中多個控件時在VS的坐上放有幾個對齊方式的按鈕能夠幫助完成這項工做,此外方向鍵也能夠進行細微調整:工具
在對主對話框佈局完後須要對控件添加變量,ctrl+shift+x調出MFC類嚮導,在CsnifferDlg(即項目默認爲主對話框建立的類)中,爲控件新建變量。對與List Control和Tree Control添加Control類型變量,爲Edit Control添加Value變量,全部空間變量以下圖所示:佈局
對於List Control,還要對其增長條目將這一部分放入項目默認建立的CSnifferDlg::OnInitDialog()函數中,添加以下代碼:spa
1 m_list1.SetExtendedStyle(m_list1.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES);// 爲列表視圖控件添加全行選中和柵格風格 2 m_list1.InsertColumn(0,_T("序號"),LVCFMT_CENTER,50); 3 m_list1.InsertColumn(1,_T("時間"),LVCFMT_CENTER,120); 4 m_list1.InsertColumn(2,_T("源MAC地址"),LVCFMT_CENTER,120); 5 m_list1.InsertColumn(3,_T("目的MAC地址"),LVCFMT_CENTER,120); 6 m_list1.InsertColumn(4,_T("長度"),LVCFMT_CENTER,50); 7 m_list1.InsertColumn(5,_T("協議"),LVCFMT_CENTER,70); 8 m_list1.InsertColumn(6,_T("源IP地址"),LVCFMT_CENTER,120); 9 m_list1.InsertColumn(7,_T("目的IP地址"),LVCFMT_CENTER,120);
OnInitDialog()這個函數是放一些用於初始化的內容,之後還會用到,至此程序的主界面設計的差很少了,下面設計選擇適配器對話框,在資源視圖中新建一個對話框,並在新建的對話框右鍵->添加類,類名通常是大寫的C開頭,這裏命名爲CAdpDlg。而後在對話空中插入以下控件:設計
在其對應的OnInitDialog()函數中,添加以下代碼:code
1 m_list1.SetExtendedStyle(m_list1.GetExtendedStyle() | LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); 2 m_list1.InsertColumn(0,_T("設備名"),LVCFMT_LEFT,350); 3 m_list1.InsertColumn(1,_T("設備描述"),LVCFMT_LEFT,250);
下面設計過濾規則對話框,在資源視圖中新建一個對話框,並在新建的對話框右鍵->添加類,類名通常是大寫的C開頭,這裏命名爲CFilterDlg。而後在對話空中插入Check Box控件,並對其添加相應變量:htm
在其對應的OnInitDialog()函數中,爲了設置複選框默認狀況下所有選中,添加以下代碼:blog
1 m_tcp.SetCheck(1); 2 m_udp.SetCheck(1); 3 m_arp.SetCheck(1); 4 m_rarp.SetCheck(1); 5 m_icmp.SetCheck(1); 6 m_igmp.SetCheck(1);
以後要咱們想要在點開菜單選項時彈出相應的對話框,首先在主對話框對應的SnifferDlg.cpp前加入兩個新建的類的頭文件
#include "AdpDlg.h"
#include "FilterDlg.h"
以後要添加觸發函數,這裏注意首先在類視圖中選中主對話框對應的類CSnifferDlg,在點擊屬性面板,點上面的閃電就會出現菜單命令的觸發按鈕,點擊後就會自動跳到相應的觸發函數中去
這裏要特別注意要首先在類視圖中選中主對話框對應的類CSnifferDlg:1是在類試圖中選擇類而不是在資源視圖中選擇對話框2是選擇添加了Menu的那個類(即主對話框類)而不是你要打開的對話框的類
當跳到觸發函數後添加以下代碼即可打開相應的對話框:
1 void CSnifferDlg::OnAdp() 2 { 3 // TODO: 在此添加命令處理程序代碼 4 CAdpDlg adpdlg; 5 adpdlg.DoModal(); 6 }
至此程序界面部分設計完成,某些函數在以後還會進行修改,但變更不大