长沙理工大学
《网络协议编程》课程设计报告
网络流量监控软件的设计与实现
xxx
学院计算机与通信工程专业网络工程
班级网络12-1学号**********
学生姓名xxxxxx指导教师xxxxx
课程成绩完成日期2015年9月25日
课程设计成绩评定
院系计算机与通信工程专业网络工程
班级网络1201学号xxxxxx
学生姓名xxxxxx指导教师xxxxxx
指导教师对学生在课程设计中的评价
评分项目优良中及格不及格
学习态度与遵守纪律情况
课程设计完成情况
课程设计报告的质量
指导教师成绩指导教师签字年月日
课程设计答辩组对学生在课程设计中的评价
评分项目优良中及格不及格
课程设计完成情况
课程设计报告的质量
课程设计答辩
答辩组成绩答辩组长签字年月日
课程设计综合成绩
注:课程设计综合成绩=指导教师成绩60%+答辩组成绩40%
课程设计任务书
计算机与通信工程学院网络工程专业
课程名称网络协议编程课程设计时间2015~2016学年第1学期3~4周
学生姓名xxxxxx指导老师xxxxxx
题目网络流量监控软件的设计与实现
主要内容:
(1)可以监控网络实时监控网络流量,同时利用图像分析显示网络流量大
小,并将结果写入日志文件。
(2)显示内容包括:网络输入流量,网络输出流量,接口名称,总流量以
及流量统计图等内容。
(3)设置停止标志,当程序接受到停止命令时即停止。
要求:
(1)结合网络协议编程课程设计所学知识设计并实现网络流量监控软件的
设计与实现。
(2)学会文献检索的基本方法和综合运用文献的能力。
(3)通过课程设计培养严谨的科学态度,认真的工作作风和团队协作精神。
应当提交的文件:
(1)课程设计学年论文。
(2)课程设计附件(相关图纸、设备配置清单、报告等)。
网络流量监控软件的设计与实现
学生姓名:xxxxxx指导老师:xxxxxx
摘要互联网迅速发展的同时,网络安全问题日益成为人们关注的焦点,病毒、恶意攻
击、非法访问等都容易影响网络的正常运行,多种网络防御技术被综合应用到网络安全管
理体系中,流量监控系统便是其中一种分析网络状况的有效方法,它从数据包流量分析角
度,通过实时地收集和监视网络数据包信息,来检查是否有违反安全策略的行为和网络工
作异常的迹象。在研究网络数据包捕获、TCP/IP原理的基础上,采用面向对象的方法
进行了需求分析与功能设计。该系统在VisualC++6.0环境下进行开发,综合采用了
Socket-Raw、注册瘦金体书法作品 表编程和IP助手API等VC编程技术,在系统需求分析的基础上,对主要
功能的实现方案和技术细节进行了详细分析与设计,并通过测试,最终实现了数据包捕获、
流量监视与统计主要功能,达到了预定要求,为网络管理员了解网络运行状态提供了参考。
关键词网络管理;数据采集;流量统计;Winsock2
TheDesignandImplementationofMonitoringand
AnalyzingToolforNetworkTraffic
Studentname:xxxxxxAdvisor:xxxxxx
Abstract
WiththerapiddevelopmentofInternet,networksafetyhasbecomepeople’sconcern,virus,vigo
rousattack,skin
dsofnetworkdefendingtechnologyhavebeencomprehensivelyappliedintothemanagementsy
ktrafficsystemisoneoftheeffectivemeasurestoanalysisnetwo
eangleofanalyzingpackettraffic,itcanexaminethesafetyviolationandt
heabnormalperformanceofnetworkbytimelycollectingandmonitoringpacketsinformation.
Byusingthewayofobject-oriented,thisdesignmakesaneedsanalysisandabilitydesigningbas
edonthestudyofnetworkpacketcollectingandTCP/heenvironmentofVisua
lC++6.0,thissystemadoptsVCprogramtechnologiesofSocket-Raw,WindowsregisterandIp
asisofsystemanalysis,itmakesadeliberateanalysisandtestofplansand
detailstoimplementpacketscollecting,meetsourneeds
andmakesareferenceformanagerstogettoknowthenetworkconditions.
Keywordsnetworkmanagement;datacollection;trafficanalysis;Winsock2
1引言
1.1背景
随着构建网络基础技术和网络应用的迅速发展以及用户对网络性能要求的提高,使得
网络管理成为迫切需要解决的问题,有效的网络管理能够保证网络的稳定运行和持续发
展,更重要的是,随着网络规模的扩大和黑客技术的发展,入侵和攻击的案例日益增多,
对稳定的网络服务、信息安全、互联网秩序都提出了严峻的挑战,网络安全管理在整个网
络管理系统里扮演起更为重要的角色。
1.2网络流量监控的引入
络安全管理体系中,流量监控和统计分析是整个管理的基础。流量检测主要目的是
通过对网络数据进行实时连续的采集监测网络流量,对获得的流量数据进行统计计算,从
而得到网络主要成分的性能指标。网络管理员根据流量数据就可以对网络主要成分进行性
能分析管理,发现性能变化趋势,并分析出影响网络性能的因素及问题所在。此外,在网
络流量异常的情况下,通过扩展的流量检测报警系统垃圾桶英文 还可以向管理人员报警,及时发现故
障加以处理。在网络流量检测的基础上,管理员还可对感兴趣的网络管理对象设置审查值
范围及配置网络性能对象,监控实时轮询网络获取定义对象的当前值,若超出审查值的正
常预定值则报警,协助管理员发现网络瓶颈,这样就能实现一定程度上的故障管理。而网
络流量检测本身也涉及到安全管理方面的内容。由此可见,对于一个有效的网络安全管
理系统来说,功能的实现都或多或少的依赖于流量信息的获取。因此网络流量信息的采集
可以说是网络安全管理系统得以实现的核心基石。它的应用可以在一定程度上检测到入侵
攻击,可以有效地帮助管理人员进行网络性能管理,并利用报警机制协助网管人员采取对
应的安全策略与防护措施,从而减少入侵攻击所造成的损失。
1.3论文结构安排
本论文围绕Winsock标准套接字网络编程的各项实践内容展开。具体内容安排如下:
第一章是引言,简要介绍开发背景、论文结构安排;第二章介绍数据包捕获与流量检测的
技术原理;第三章重点介绍网络流量监测工具的设计与实现过程,并且详细阐述了从系统
功能总体设计、详细设计、具体实现的全部过程。
2.网络数据采集技术的分析
2.1OSI参考模型与TCP/IP体系结构
开放系统互联参考模型OSI是由国际标准化组织ISO制定的标准化开放式的计算机网
络层次结构模型,其结构如图1所示。
可以看出,该结构共有七层,各层主要实现如下功能:
(1)物理层,利用传输介质实现相邻节点间的物理连接,主要对机械、电气、功能
和规程四个方面及信号传输速率方面进行规定;
(2)数据链路层,完成管理数据的传输,提供差错检测和恢复,并且提供流量控制,
最终实现向上一层提供无差错、高可靠性的传输链路;
(3)网络层,执行路由算法和流量控制算法,完成数据分组传输,它是通信子网的
最高层;
(4)传输层,提供端到端的无差错传输,同时,它也提供属于局通信网络接口,比
如SOCKET;
(5)会话层,完成用户之间会话的组织、协调、分配用户名等;
(6)表示层,解决数据格式问题,规定编码方式;
(7)应用层,OSI的最高层,利用应用进程提供网络访问手段。
如图2.1所示:
图1OSI参考模型
2.2TCP/IP体系结构
由于TCP/IP比其之前的OSI模型更具体实现,随着互联网的不断发展,遵循TCP/IP
结构的网络不断普及,因此现在通常采用TCP/IP代表Internet体系结构。TCP/IP的目的
是在网络标准不同的情况下解决互联问题,可以说,网络互联是TCP/IP的核心。TCP/IP
的体系结构如图2.2所示:
TCP/IP在设计时重点并没有放在具体通信的实现上,所以对最后两层没有做出具体规
定,同时表明它允许不同类型的通信网络参与通信。它的四个层次功能如下。
(1)应用层,提供常用的应用程序及自定义的应用程序,数据传输时用TCP/IP协议
来进行;
(2)传输层,提供端到端的应用程序之间的通信,可以使用传输控制协议TCP
(TransmissionControlProtocol)或用户数据报协议UDP(UrDatagramProtocol)
协议,前者提供可靠传输,传送单位是报文段,后者提供不可靠服务,传输单位是数据报,
即分组。此外,传输层另外一个功能就是区别应用程序;
(3)网际层,负责计算机之间的通信,采用的协议是IP协议,数据传送单位是分组,
向上提供不可靠的传输服务;
(4)网络接口层,负责接收数据报,并实现发送,或者接收帧,提取IP数据报,交
给互联网层。
图2.2OSI参考模型与TCP/IP结构
2.3OSI模型与TCP/IP体系结构的区别
从前面的分析可以看出OSI模型和TCP/IP体系有许多不同之处,主要体现在问题的
处理上面,例如:
(1)TCP/IP一开始就考虑的是异构网络的互联问题,并将IP看作是整个体系的重要
组成部分,而ISO并没有认识到网际协议IP的重要性,导致最后只能单独划分一个子层
来完成IP的作用;
(2)OSI最开始只注意到了面向连接的服务,而TCP/IP一开始就注意了面向连接和
无连接的并重。相比起来,TCP/IP更注重了数据传输的效率,而OSI则注重了传输的可靠
性;
(4)TCP/IP虽然分层,但是调用关系并不像OSI那样严格,减少了不必要的开销,
提高了传输效率。
2.4原始数据报捕获的实现
网络上的数据包捕获机制主要依赖于所使用的操作系统,不同的操作系统下有不同的
实现途径。在Windows环境下,可通过网络驱动程序接口规范(NDIS),WinSock的
SOCK_RAW或虚拟设备驱动技术(VxD)等技术实现网络数据包的捕获功能。前面已经
介绍到了,使用原始套接字可以绕过Socket提供的功能,对底层的协议进行使用与开发,
可以根据自己的需要生成想要的数据报文等,下面开始介绍使用原始套接字对数据包捕获
进行开发的相关技术知识。
第一,使用套接字前,需要了解网卡接收数据的工作原理:在正常情况下,网络
接口只响应两种数据帧,一种是与自己的硬件相苏轼字什么号什么名字 匹配的数据帧,另一种四向所有计算机广
播的数据帧。在系统中,数据帧的收发由网卡完成,网卡程序接收从网络发来的数据包,
根据其硬件地址去判断是否与本机的硬件地址匹配,若匹配就通知CPU产生中断进行响应,
然后调用驱动程序设置的网卡中断程序地址调用驱动程序接收数据,然后放入堆栈进行系
统相关处理,若不匹配则直接丢弃该数据包。对于网络接口,它一般具有4种数据接收模
式:广播、组播、直接和混杂模式,只有当把接口设置为混杂模式时,网络接口才能接收
所有的数据,无论地址是否匹配,所以在做本设计的时候一定要设置为混杂模式才能实现
数据的采集。
第二,需要了解套接字的工作程序和使用方法:一般来说,采用套接字开发网络程
序需要经历以下几个基本步骤:启动、创建、绑定、监听(接受连接)、连接、发送/接
收数据、关闭、卸载等。第三,具体到Windows下利用原始套接字捕获网络数据可以这
样设计:(1)启动套接字;(2)创建一个原始套接字;(3)将套接字与本地地址绑定;
(4)设置操作参数;(5)设置网络接口为混杂模式;(6)启动监听线程,开始接收数
据;(7)退出关闭套接字。
2.5原始数据包捕获的关键函数
(1)启动函数
WSAStartupintPASCALFARWSAStartup(DWORDwVersionRequested,
LPWSADATAlpWSAData);
每一个套接字应用程序都必须调用该函数进行一系列初始化工作,并且只有调用成
功返回后,才能开始使用套接字,其中参数wVersionRequested是版本号,高字节是次版本
号、低字节是主版本号,参数lpWSAD狐狸的夏天第三季 ata是指向WSADATA结构的指针。
(2)套接字创建函数
socketSOCKETsocket(intaf,inttype,intprotocol);所有的通信在建立之前都必须
创建一个套接字,socket函数的功能就是创建套接字,其中参数af指协议地址族(address
family),当建立的套接字是依赖于UDP或TCP的话,需要设置af为AF_INET,表示采用IP
协议。参数type是指协议的套接字类型,采用流式套接字时用SOCK_STREAM,采用数据
报套接字时用SOCK_DGRAM,采用原始套接字时用SOCK_RAW。参数protocol是协议字
段,默认情况下可直接设置为0。
3.网络流量监控系统各模块的设计与实现
3.1开发环境介绍
本设计开发平台采用MicrosoftVisualstudio6.0,它是目前使用比较广泛的Winsock
开发平台,因此具有较强的适应性,能够在很多的操作系统平台上运行,设计后具有直观
的简洁的操作界面,稳定性也比较高。
3.2总体结构设计
通过收集与分析简单网络流量监控软件的用户需求,总结出以下特征:
(1)需要实现对网络接口数据包的尽可能多的上海开学 捕获,将网卡设置为混杂模式,然后
进行数据包的采集;
(2)数据包的内容要进行一定的解析,对数据包的协议类型、源目地址、数据包截
获时间、数据包内容需要进行分析;
(3)根据用户不同的要求能够依照特定地址范围、特定协议类型相关包等条件进行
自定义监视;
(4)监视结果输出有实时流量图、列表等显示;
(5)实现日志记录,便于日后分析;
(6)对某些常见的攻击进行发现分析。
总合以上系统要求与综合分析,本系统总体设计如下,采用VC++6.0编写,系统具有
三个主要功能部分:数据捕获与显示模块、流量信息统计模块、流量绘制模块,如图3.1
所示。
数据采集模块:完成网络接口数据的捕获、解析和显示,可以根据用户定义条件组合
来进行捕获,如只监视采用TCP或UDP协议的数据包,也可以监视用户希望关注的相关IP
地址的数据包,同时完成数据封包日志记录,提高了系统的灵活性。同时,在对数据包的
解析过程中对一些常见入侵攻击特征进行判断,发出预警。该模块采用编写原始套接字开
图3.1系统总体设计结构图
流量监控分析系统
数据采集模块信息统计模块流量绘制模块
发。
信息统计模块:完成统计功能,如统计IP要实现统计接收到的数据报数量、接收到
的数据中协议出错的数量、正在请求传输的数量、路由表中可用路由数量、丢弃的数量、
需要重组/成功重组的数量等,统计ICMP需要完成发送/接收的消息数量、满足超过TTL
的数量、重定向数量、时间戳请求/应答数量等;采用IP助手函数完成。
流量绘制模块:完成总流量、输入流量、输出流量、瞬时流量值、最高流量值的显示;
采用访问注册表网络性能数据完成有关数据的获取,通过流量图显示。
3.3流程图设计
本系统总体设计如下,采用VC++6.0编写,系统具有三个主要功能部分:数据捕获与
显示模块、流量信息统计模块、流量绘制模块。根据上面对各个功能模块的划分,进行更
进一步的分析和设计,得到数据采集、注册表网络性能块访问大致的工作流程图,如图3.2
所示:
图3.2数据捕获流程图
3.4代码分析
(1)功能实现说明该功能模块主要由封装的CSockSupport,CsockHelper,
CpackInterDlg,CbinDataDlg四个类完成,下面将对这些类进行详细说明。CsockSupport
类:主要负责检查Socket是否支持2.0版本,在该类中封装了WSAStartup完成Socket的启动;
CsockHelper类:主要实现了从获取本机信息结构、So家庭防火手抄报 cket创建、绑定、设置、启动线程、
数据接收到协议分析的全部方法。GetLocalIP实现获取本机地址操作的方法,
LPHOSTENTlphp是定义一个主机信息结构,获取过程由
gethostname(szLocname,MAX_HOSTNAME_LAN)与gethostbyname(szLocname)完成;第一
个参数是用于放置本机名称的缓冲,第二个参数是缓冲区长度,最后利用inet_ntoa将IP地
址转化为“.”式地址。
StartCapture方法完成套接字的创建、绑定、设置操作方式和启动线程;
具体完成如下:
m_sockCap=socket(AF_INET,SOCK_RAW,IPPROTO_IP);//创建套接字
bind(m_sockCap,(PSOCKADDR)&sa,sizeof(sa));//绑定
tsockopt(m_sockCap,SOL_SOCKET,SO_REUSEADDR,(char*)&bopt,sizeof(bopt))//
设置操作
tsockopt(m_sockCap,IPPROTO_IP,IP_HDRINCL,(char*)&bopt,sizeof(bopt))//设
置操作
m_hCapThread=CreateThread(NULL,0,CaptureThread,this,0,NULL);//启动线程
线程函数CaptureThread主要完成数据的接收。数据接收后,将缓冲区数据转化为IP数据
格式后即可以开始解析过程,协议名称获取如下:
for(inti=0;i
ProtoMap[i].ProtoText;return“”;
ParIPPack方法完成数据包的解析:intiIphLen=sizeof(unsignedlong)*
(pIpheader->h_lenver&0xf)//获取数据包长度
协议解析:switch(iProtocol){caIPPROTO_TCP:„„caIPPROTO_UDP:
„„caIPPROTO_ICMP:„„default:„„}StopCapture完成关闭线程和套接
字操作:
if(m_hCapThread){TerminateThread(m_hCapThread,0);//中断进程
CloHandle(m_hCapThread);//关闭句柄
m_hCapThread=NULL;}if(m_sockCap)closocket(m_sockCap);//关闭套接
字CbinDataDlg类主要完成对已捕获数据的存储和显示方法;
(2)数据包采集中各类的关系
经过上面的分析与设计,得到该系统的总体功能结构、工作流程,也确定了从编写套
接字到最后捕获数据,要经过创建、绑定、设置工作模式、启动线程、接收数据等一系列
的处理操作。为了实现处理中的每一步操作,设计了数据捕获的类关系,如图3.3所示。
在上图中CSockSupport,CSockHelper,CPackInterDlg,CBinDataDlg等是封装了
各部分主要处理功能的类。且这些类中封装了和这些类的操作相关的方法。将在后面对这
些类的功能和实现进行详细介绍。
3.5结果显示
初始界面如图3.4所示:
图3.4流量监控软件的界面
当单击鼠标右键时,会显示接口名称以及监控期间的总流量,如图3.5所示
图3.3数据包采集中各类的关系
图3.5接口选择以及总流量统计
4.结束语
互联网的迅猛发展,流量检测和统计分析成为整个网络安全管理系统的基础部分。网
络管理员可以根据数据流量的变化规律,发现网络故障与攻击行为,及时采取措施,减少
损失。网络流量分析系统是一个比较复杂的系统,由于时间关系,本设计只完成了大概
框架,通过编写套接字、访问注册表等方法实现了部分主要功能,并没有完全完成详细指
标,比如只提供了局域网内流量实时监测、数据包解析、简单统计等功能,这些都有待于
进一步改进、深入与完善,下一步工作的重点将是提供更多监控功能,对网络行为进行更
深入的分析。在整个设计过程中,重点放在了数据捕获与流量实时监控两个功能上,进
而描述了采用套接字开发流量监控系统中的思路和关键事项,阐述了开发过程中碰到的一
些技术问题,对功能需求与细节实现进行了详细分析与设计。
参考文献
[1]陈伯成,范闽,李英杰.利用网络监听维护子网系统安全的一种方法[J].计算机工程
与应用.2000,(10):133-135。
[2]李凌.Winsock网络编程实用教程[M].北京:清华大学出版社,2003.11:9-35。
[3]曹衍龙,刘海英.VisualC++网络通信编程实用案例精选(第二版)[M].北京:人民
邮电出版社,2006.5:425-437。
[4]孙贤淑.IP网络流量测量的研究与应用[D].北京:北京邮电大学[硕士论文],2005。
[5]许勇,吴忠堂.网络流量采集与分析系统中数据采集的研究与实现[D].广州:华南
理工大学[硕士论文],2004。
附录:
#include"stdafx.h"
#include"NetTrafficButton.h"
#include"NetTrafficButtonDlg.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
//自身的一个指针,这是为回调函数服务的
CNetTrafficButtonDlg*me;
//记录选择的接口号
intSelectedInterface;
//一个回调函数
voidCALLBACKinterfaceHasChanged(intinterfacenumber);
classCAboutDlg:publicCDialog
{
public:
CAboutDlg();
//{{AFX_DATA(CAboutDlg)
enum{IDD=IDD_ABOUTBOX};
//}}AFX_DATA
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//}}AFX_VIRTUAL
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()};
CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
voidCAboutDlg::DoDataExchange(CDataExchange*pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//KeineNachrichten-Handler
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CNetTrafficButtonDlgDialogfield
CNetTrafficButtonDlg::CNetTrafficButtonDlg(CWnd*pParent/*=NULL*/)
:CDialog(CNetTrafficButtonDlg::IDD,pParent)
{
//{{AFX_DATA_INIT(CNetTrafficButtonDlg)
//}}AFX_DATA_INIT
m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
//为回调函数服务的
me=this;
}
voidCNetTrafficButtonDlg::DoDataExchange(CDataExchange*pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNetTrafficButtonDlg)
DDX_Control(pDX,IDC_BUTTON3,m_cOutgoing);
DDX_Control(pDX,IDC_BUTTON2,m_cIncoming);
DDX_Control(pDX,IDC_BUTTON1,m_cTotalTraffic);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNetTrafficButtonDlg,CDialog)
//{{AFX_MSG_MAP(CNetTrafficButtonDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON4,OnAbout)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
//CNetTrafficButtonDlgMessagehandler
BOOLCNetTrafficButtonDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX&0xFFF免洗面膜好吗 0)==IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX<0xF000);
CMenu*pSysMenu=GetSystemMenu(FALSE);
if(pSysMenu!=NULL)
{
CStringstrAboutMenu;
ring(IDS_ABOUTBOX);
if(!y())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);
}
}
SetIcon(m_hIcon,TRUE);
SetIcon(m_hIcon,FALSE);
//使用第一个发现的网络连接
intSelectedInterface=0;
//每秒钟刷新一次网络状态
UINTtimerresolution=1000;
//
UINTgridresolution=100;
//监视的接口
m_erfaceNumber(SelectedInterface);
//这个button关注的时总流量
m_TrafficType(MFTrafficButton:网络地址查询 :Traffic_Total);
//设置得到通知的回调函数
m_erfaceNumberNotificationFunction(interfaceHasChanged);
//设置台湾鸡排 更新速率
m_ateSpeed(timerresolution,gridresolution);
m_erfaceNumber(SelectedInterface);
m_TrafficType(MFTrafficButton::Traffic_Outgoing);
m_erfaceNumberNotificationFunction(interfaceHasChanged);
m_ateSpeed(timerresolution,gridresolution);
m_erfaceNumber(SelectedInterface);
m_TrafficType(MFTrafficButton::Traffic_Incoming);
m_erfaceNumberNotificationFunction(interfaceHasChanged);
m_ateSpeed(timerresolution,gridresolution);
returnTRUE;
}
voidCNetTrafficButtonDlg::OnSysCommand(UINTnID,LPARAMlParam)
{
if((nID&0xFFF0)==IDM_ABOUTBOX)
{
CAboutDlgdlgAbout;
l();
}
el
{
CDialog::OnSysCommand(nID,lParam);
}
}
voidCNetTrafficButtonDlg::OnPaint()
{
if(IsIconic())
{
CPaintDCdc(this);
SendMessage(WM_ICONERASEBKGND,(WPARAM)eHdc(),0);
intcxIcon=GetSystemMetrics(SM_CXICON);
intcyIcon=GetSystemMetrics(SM_CYICON);
CRectrect;
GetClientRect(&rect);
intx=(()-cxIcon+1)/2;
inty=(()-cyIcon+1)/2;
on(x,y,m_hIcon);
}
el
{
CDialog::OnPaint();
}
}
HCURSORCNetTrafficButtonDlg::OnQueryDragIcon()
{
return(HCURSOR)m_hIcon;
}//回调函数
voidCALLBACKinterfaceHasChanged(intinterfacenumber)
{
SelectedInterface=interfacenumber;
CStringtext;
("NetTrafficButtonusingInterface:%d",SelectedInterface);
me->SetWindowText(text);
}
voidCNetTrafficButtonDlg::OnAbout()
{
//TODO:Addyourcontrolnotificationhandlercodehere
CAboutDlgabout;
l();
::AfxGetMainWnd();
}
本文发布于:2023-03-25 23:01:47,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1679756509387081.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:流量软件.doc
本文 PDF 下载地址:流量软件.pdf
留言与评论(共有 0 条评论) |