📄 mainfrm.cpp
字号:
// MainFrm.cpp : implementation of the CMainFrame class
//
#include "stdafx.h"
#include "IPControl.h"
#include "Splash.h"
#include "MainFrm.h"
#include "IPControlDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define MYWM_NOTIFYICON WM_USER+101
#define ID_MYEDIT 101
#define ID_MYTREE 100
#define ID_MYLIST 99
/////////////////////////////////////////////////////////////////////////////
// CMainFrame
IMPLEMENT_DYNCREATE(CMainFrame, CFrameWnd)
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(ID_BUTTONSHOWLEFT, OnButtonshowleft)
ON_COMMAND(ID_BUTTONSHOWBOTTOM, OnButtonshowbottom)
ON_UPDATE_COMMAND_UI(ID_BUTTONSHOWLEFT, OnUpdateButtonshowleft)
ON_UPDATE_COMMAND_UI(ID_BUTTONSHOWBOTTOM, OnUpdateButtonshowbottom)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_WM_CLOSE()
ON_WM_ACTIVATE()
ON_COMMAND(ID_FILE_SAVE, OnFileSave)
ON_WM_TIMER()
ON_COMMAND(ID_HELP, OnHelp)
ON_WM_KEYDOWN()
//}}AFX_MSG_MAP
ON_NOTIFY(NM_CLICK,ID_MYLIST,OnListCtrlClick)
ON_NOTIFY(TVN_SELCHANGED, ID_MYTREE, OnSelchangedTree1)
ON_CBN_SELCHANGE(ID_TOOL_ZOOM, OnSelchangeCombo1)
END_MESSAGE_MAP()
static UINT indicators[] =
{
ID_SEPARATOR, // status line indicator
IDS_TIMER,
ID_INDICATOR_CAPS,
ID_INDICATOR_NUM,
ID_INDICATOR_SCRL,
};
/////////////////////////////////////////////////////////////////////////////
// CMainFrame construction/destruction
CMainFrame::CMainFrame()
{
// TODO: add member initialization code here
//this->GetActiveView()->SetFramePointer();
}
CMainFrame::~CMainFrame()
{NOTIFYICONDATA tnid;
tnid.cbSize=sizeof(NOTIFYICONDATA);
tnid.hWnd=this->m_hWnd;
tnid.uID=IDR_MAINFRAME;
Shell_NotifyIcon(NIM_DELETE,&tnid);
}
//列表筐被单击时的响应函数
//被单击->计算被选中的元素->通知文档类更新树->文档类通知视图类执行真的更新操作
void CMainFrame::OnListCtrlClick(NMHDR* pNMHDR, LRESULT* pResult)
{
//MessageBox("CMainFrame::OnListCtrlClick");
POSITION pos;
pos=m_wndList.GetFirstSelectedItemPosition();
int index=m_wndList.GetNextSelectedItem(pos); //被选中的行数,从0开始算起 -1表示没有选中
if(index==-1) //-1表示没有选中
return;
ShowControlBar(&m_wndMyBarLeft,TRUE,FALSE); //使数型控件显示
ShowControlBar(&m_wndMyBarBottom,TRUE,FALSE); //使编辑控件显示
//获得文档指针
CIPControlDoc* pdoc=(CIPControlDoc*)this->GetActiveDocument();
pdoc->UpdateTree(index); //更新树形控件
pdoc->UpdateEdit(index); //更新编辑控件
}
//树型控件选项改变时的响应函数
void CMainFrame::OnSelchangedTree1(NMHDR* pNMHDR, LRESULT* pResult)
{
//MessageBox("CMainFrame::OnSelchangedTree1");
}
//组合框选项改变时的响应函数
void CMainFrame::OnSelchangeCombo1()
{
CString str,str1;
m_wndBar1.m_wndComboBox.GetWindowText(str1);
str.Format("所选择的适配器:%s",str1);
if(m_wndBar1.m_wndComboBox.GetCurSel()!=-1)
{
m_wndEdit.SetWindowText(str);
}
else
{
m_wndEdit.SetWindowText("还没有选择适配器!");
}
// MessageBox(str1);
}
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
CImageList img;
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
if (!m_wndBar1.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
| CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||
!m_wndBar1.LoadToolBar(IDR_TOOLBAR1))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
/*
//设置指定工具项的宽度并获取新的区域 80是宽度
m_wndToolBar.SetButtonInfo(index,ID_TOOL_ZOOM,TBBS_SEPARATOR,80);
m_wndToolBar.GetItemRect(index,&rect);
rect.top+=2;
rect.bottom+=100;
if(!m_wndToolBar.m_wndComboBox.Create(WS_CHILD|WS_VISIBLE|CBS_AUTOHSCROLL|
CBS_DROPDOWNLIST|CBS_HASSTRINGS,
rect,&m_wndToolBar,ID_TOOL_ZOOM))
{
TRACE0("Failed to create combo-box\n");
return FALSE;
}
m_wndToolBar.m_wndComboBox.ShowWindow(SW_SHOW);
*/
/*
m_wndToolBar.SetButtonText(0,"控制");
m_wndToolBar.SetButtonText(1,"编辑");
CRect rc(0, 0, 0, 0);
CSize sizeMax(0, 0);
CToolBarCtrl& bar = m_wndToolBar.GetToolBarCtrl();
for(int index=bar.GetButtonCount()-1;index>=0;index--)
{
bar.GetItemRect(index,rc);
rc.NormalizeRect();
sizeMax.cx = __max(rc.Size().cx, sizeMax.cx);
sizeMax.cy = __max(rc.Size().cy, sizeMax.cy);
}
m_wndToolBar.SetSizes(sizeMax,CSize(16,15));
*/
m_wndToolBar.GetToolBarCtrl().SetButtonWidth(40, 100);
img.Create(28, 28, ILC_COLOR8|ILC_MASK,2,2);
img.SetBkColor(::GetSysColor(COLOR_BTNFACE));
img.Add(AfxGetApp()->LoadIcon(IDI_1));//0收信
img.Add(AfxGetApp()->LoadIcon(IDI_2));//1写信
img.Add(AfxGetApp()->LoadIcon(IDI_3));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_4));//3收信
img.Add(AfxGetApp()->LoadIcon(IDI_5));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_8));//3收信
img.Add(AfxGetApp()->LoadIcon(IDI_10));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_9));//3收信
img.Add(AfxGetApp()->LoadIcon(IDI_6));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_7));//2电话本
m_wndToolBar.GetToolBarCtrl().SetHotImageList(&img);
img.Detach();
//下面的代码是设置"冷"的位图
img.Create(26, 26, ILC_COLOR8|ILC_MASK, 2,2);
img.SetBkColor(::GetSysColor(COLOR_BTNFACE));
img.Add(AfxGetApp()->LoadIcon(IDI_1));//0收信
img.Add(AfxGetApp()->LoadIcon(IDI_2));//1写信
img.Add(AfxGetApp()->LoadIcon(IDI_3));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_4));//3收信
img.Add(AfxGetApp()->LoadIcon(IDI_5));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_8));//3收信
img.Add(AfxGetApp()->LoadIcon(IDI_10));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_9));//3收信
img.Add(AfxGetApp()->LoadIcon(IDI_6));//2电话本
img.Add(AfxGetApp()->LoadIcon(IDI_7));//2电话本
m_wndToolBar.GetToolBarCtrl().SetImageList(&img);
img.Detach();
m_wndToolBar.ModifyStyle(0, TBSTYLE_FLAT |CBRS_TOOLTIPS | TBSTYLE_TRANSPARENT|TBBS_CHECKBOX );
m_wndToolBar.SetButtons(NULL,14);
m_wndToolBar.SetButtonInfo(0, ID_BUTTONSTART, TBSTYLE_BUTTON, 0);
m_wndToolBar.SetButtonText(0, "开始扫描");
m_wndToolBar.SetButtonInfo(1, ID_BUTTONSTOP, TBSTYLE_BUTTON, 1);
m_wndToolBar.SetButtonText(1, "停止扫描");
m_wndToolBar.SetButtonInfo(2, ID_APP_EXIT, TBSTYLE_BUTTON, 2);
m_wndToolBar.SetButtonText(2, "退出系统");
m_wndToolBar.SetButtonInfo(3, 160, TBBS_SEPARATOR, 0);
m_wndToolBar.SetButtonInfo(4, IDM_IDSRULE, TBSTYLE_BUTTON, 3);
m_wndToolBar.SetButtonText(4, "规则管理");
m_wndToolBar.SetButtonInfo(5, 160, TBBS_SEPARATOR, 0);
m_wndToolBar.SetButtonInfo(6, ID_FILE_NEW, TBSTYLE_BUTTON,4);
m_wndToolBar.SetButtonText(6, "清空记录");
m_wndToolBar.SetButtonInfo(7, 160, TBBS_SEPARATOR, 0);
m_wndToolBar.SetButtonInfo(8, ID_BUTTONSHOWLEFT, TBSTYLE_BUTTON,5);
m_wndToolBar.SetButtonText(8, "记录分析");
m_wndToolBar.SetButtonInfo(9, ID_BUTTONSHOWBOTTOM, TBSTYLE_BUTTON,6);
m_wndToolBar.SetButtonText(9, "统计信息");
m_wndToolBar.SetButtonInfo(10, ID_BUTTONVIEW, TBSTYLE_BUTTON,7);
m_wndToolBar.SetButtonText(10, "行为查看");
m_wndToolBar.SetButtonInfo(11, 160, TBBS_SEPARATOR, 0);
m_wndToolBar.SetButtonInfo(12, ID_APP_ABOUT, TBSTYLE_BUTTON,8);
m_wndToolBar.SetButtonText(12, "关于");
m_wndToolBar.SetButtonInfo(13, ID_HELP, TBSTYLE_BUTTON,9);
m_wndToolBar.SetButtonText(13, "软件帮助");
CRect rectToolBar;
m_wndToolBar.GetItemRect(0, &rectToolBar);
//设置按钮的大小
m_wndToolBar.SetSizes(rectToolBar.Size(), CSize(26,26));
if (!m_wndStatusBar.Create(this) ||
!m_wndStatusBar.SetIndicators(indicators,
sizeof(indicators)/sizeof(UINT)))
{
TRACE0("Failed to create status bar\n");
return -1; // fail to create
}
// TODO: Delete these three lines if you don't want the toolbar to
// be dockable
m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndToolBar);
CFont* p_ParentFont = new CFont;
p_ParentFont->CreateFont(13,0,0,0,FW_NORMAL,FALSE,FALSE,0,ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH | FF_SWISS,"宋体");
//创建左边的控制条
if(!m_wndMyBarLeft.Create(_T("数据包"),this,123))
{
MessageBox("Fail to Create m_wndMyBarLeft!");
return -1;
}
//创建下面的控制条
if(!m_wndMyBarBottom.Create(_T("数据"),this,CSize(100,100),TRUE,124))
{
MessageBox("Fail to Create m_wndMyBarBottom!");
return -1;
}
if(!m_wndMyBarRight.Create(_T("显示"),this,CSize(700,700),TRUE,125))
{
MessageBox("Fail to Create m_wndMyBarRight!");
return -1;
}
//停靠控制
m_wndMyBarLeft.SetBarStyle(m_wndMyBarLeft.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBarBottom.SetBarStyle(m_wndMyBarBottom.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBarRight.SetBarStyle(m_wndMyBarRight.GetBarStyle()|CBRS_TOOLTIPS|CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
m_wndMyBarLeft.EnableDocking(CBRS_ALIGN_ANY);
m_wndMyBarBottom.EnableDocking(CBRS_ALIGN_ANY);
//m_wndMyBarRight.EnableDocking(CBRS_ALIGN_ANY);
DockControlBar(&m_wndMyBarLeft,AFX_IDW_DOCKBAR_LEFT);
DockControlBar(&m_wndMyBarBottom,AFX_IDW_DOCKBAR_BOTTOM);
//DockControlBar(&m_wndMyBarRight,AFX_IDW_DOCKBAR_RIGHT);
//在下面创建一个编辑筐
m_wndEdit.Create(WS_VSCROLL|WS_CHILD|WS_VISIBLE|ES_AUTOVSCROLL|ES_READONLY|
ES_MULTILINE|ES_WANTRETURN,CRect(0,0,0,0),&m_wndMyBarBottom,ID_MYEDIT);
m_wndEdit.ModifyStyleEx(0,WS_EX_CLIENTEDGE);//WS_EX_CLIENTEDGE使之有边框 3D look
//m_wndStatic.Create("picutre",WS_CHILD|WS_VISIBLE|SS_BLACKFRAME,CRect(0,0,0,0),&m_wndMyBarRight);
m_wndEdit.SetFont(p_ParentFont,TRUE);
//左边添加树形控件
m_wndTree.Create(WS_CHILD|WS_VISIBLE|TVS_HASLINES|TVS_HASBUTTONS|TVS_LINESATROOT,CRect(0,0,0,0),&m_wndMyBarLeft,ID_MYTREE);
m_wndTree.ModifyStyleEx(0,WS_EX_CLIENTEDGE);
// HTREEITEM hti=m_wndTree.InsertItem(_T("接收到的数据包"));
// m_wndTree.InsertItem(_T("以太网头"),hti);
//右边添加列表筐
m_wndList.Create(WS_CHILD|WS_VISIBLE|LVS_REPORT|LVS_ALIGNTOP|LVS_SINGLESEL|LVS_SHOWSELALWAYS|LVS_EX_FULLROWSELECT,CRect(0,0,0,0),&m_wndMyBarRight,ID_MYLIST);
//插入3列
m_wndList.InsertColumn(0,"序号",LVCFMT_LEFT,80);
m_wndList.InsertColumn(1,"时间",LVCFMT_LEFT,80);
m_wndList.InsertColumn(2,"长度",LVCFMT_LEFT,80);
m_wndList.InsertColumn(3,"源MAC",LVCFMT_LEFT,100);
m_wndList.InsertColumn(4,"目的MAC",LVCFMT_LEFT,100);
m_wndList.InsertColumn(5,"类型",LVCFMT_LEFT,100);
m_wndList.InsertColumn(6,"源IP/端口",LVCFMT_LEFT,134);
m_wndList.InsertColumn(7,"目的IP/端口",LVCFMT_LEFT,134);
//扩展风格
//LVS_EX_FULLROWSELECT 可选择整行
//LVS_EX_GRIDLINES 出现网格
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -