MFC+WinPcap編寫一個嗅探器之二(界面)

選擇新建->項目->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 }

至此程序界面部分設計完成,某些函數在以後還會進行修改,但變更不大

 

下一節  MFC+WinPcap編寫一個嗅探器之三(WinPcap)

相關文章
相關標籤/搜索