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


選擇新建->項目->MFC應用程序->基於對話框完成,這里文件名為sniffer

打開資源視圖中的Dialog列表,打開項目總默認創建的話框,將對話框中的所有控件刪除,之后按照最終效果一一從工具欄中添加控件:List Control,用於顯示數據包概要信息;Tree Control,用於顯示數據包詳細信息;Edit Control,用於顯示數據包具體內容;此外還需要添加各種Static Text和Edit Control用於顯示統計量的信息。為了美觀請根據情況添加Group Box,這樣可以使界面顯得更加有條理

添加完這些控件后,需要對空間的屬性進行設置,打開屬性面板,首先將所有的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()函數中,添加如下代碼:

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()函數中,添加如下代碼:

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控件,並對其添加相應變量:

 

在其對應的OnInitDialog()函數中,為了設置復選框默認情況下全部選中,添加如下代碼:

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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM