第4讲Windows编程基础.ppt

上传人:豆**** 文档编号:77653485 上传时间:2023-03-16 格式:PPT 页数:65 大小:573.50KB
返回 下载 相关 举报
第4讲Windows编程基础.ppt_第1页
第1页 / 共65页
第4讲Windows编程基础.ppt_第2页
第2页 / 共65页
点击查看更多>>
资源描述

《第4讲Windows编程基础.ppt》由会员分享,可在线阅读,更多相关《第4讲Windows编程基础.ppt(65页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第4讲Windows编程基础 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望2 2编程的基本概念编程的基本概念编程的基本概念编程的基本概念与与WindowsWindows系统密切相关的八个基本概念:系统密切相关的八个基本概念:窗口、程序进程、线程消息、事件句柄、API与SDK。3 31 1 1 1、窗口、窗口、窗口、窗口窗口是Windows本身以及Windows 环境下的应用程序的基本界面单位,但是很多人都误以为只有具有标题栏、状态栏、最大化、最小化按钮这样标准的

2、方框才叫窗口。其实窗口的概念很广,例如按钮按钮和对话框对话框等也是窗口,只不过是一种特殊的窗口罢了。4 42 2 2 2、程序、程序、程序、程序通常说的程序都是指一个能让计算机识别的文件。接触最多的是以exe或者com作为扩展名的文件。注意:程序是静态的,进程是动态的。5 53 3 3 3、进程、进程、进程、进程进程就是应用程序的执行实例(或称一个执行程序),进程是程序动态的描述。一个exe文件,在没有被执行的时候称之为应用程序,当被执行以后,就被操作系统作为一个进程执行了。当关机或退出,进程便消亡彻底结束了生命。进程经历了由“创建”到“消亡”的生命期,而程序自始至终存在于你的硬盘上,不管计算

3、机是否启动。6 64 4 4 4、线程、线程、线程、线程线程是进程的一个执行单元线程是进程的一个执行单元,同一个进程中的各个线程对应于一组CPU指令、一组CPU寄存器以及一个堆栈。进程的动态性,是通过线程来体现的。7 75 5 5 5、消息、消息、消息、消息消息是应用程序和计算机交互的途径,在计算机上几乎做每一个动作都会产生一个消息鼠标被移动会产生WM_MOUSEMOVE消息,鼠标左键被按下会产生WM_LBUTTONDOWN的消息,鼠标右键按下便产生WM_RBUTTONDOWN消息等等。8 8关于消息及消息队列关于消息及消息队列关于消息及消息队列关于消息及消息队列操作系统能够将输入设备的变化上

4、传给应用程序操作系统能够将输入设备的变化上传给应用程序操作系统能够将输入设备的变化上传给应用程序操作系统能够将输入设备的变化上传给应用程序。如用户在某个程序活动时按了一下键盘,操作系统马上能够感知到这一事件,并且能够知道用户按下的是哪一个键,操作系统并不决定对这一事件如何作出反应,而是将这一事件转交给应用程序,由应用程序决定如何对这一事件作出反应由应用程序决定如何对这一事件作出反应由应用程序决定如何对这一事件作出反应由应用程序决定如何对这一事件作出反应。(好比有个蚊子叮了我们一口,我们的神经末梢(相当于操作系统)马上感知到这一事件,并传递给了我们的大脑(相当于应用程序),我们的大脑最终决定如何

5、对这一事件作出反应,如将蚊子赶走,或是将蚊子拍死。)对事件作出反应的过程就是消息响应。对事件作出反应的过程就是消息响应。对事件作出反应的过程就是消息响应。对事件作出反应的过程就是消息响应。9 96 6 6 6、事件、事件、事件、事件事件是程序对外界动作的反应事件是程序对外界动作的反应。在程序运行的过程中改变窗口的大小或者移动窗口等,都会触发相应的“事件”,从而调用相关的事件处理函数。10107 7 7 7、句柄、句柄、句柄、句柄句柄是一个指针句柄是一个指针,通过句柄就可以控制该句柄指向的对象。句柄是系统用来标识不同对象类型的工具。如窗口、菜单等,这些东西在系统中被视为不同类型的对象,用不同的句

6、柄将他们区分开来。1111关于句柄关于句柄关于句柄关于句柄 句柄(句柄(句柄(句柄(HANDLEHANDLEHANDLEHANDLE),资源的标识),资源的标识),资源的标识),资源的标识。操作系统要管理和操作这些资源,都是通过句柄来找到对应的资源。按资源的类型,又可将句柄细分成图标句柄(HICON)、光标句柄(HCURSOR)、窗口句柄(HWND)、应用程序实例句柄(HINSTANCE)等。操作系统给每一个窗口指定的一个唯一的标识号即窗口句柄。12128 8 8 8、APIAPIAPIAPI与与与与SDKSDKSDKSDKAPI是英文Application Programming Inter

7、face 的缩写,意思是“应用程序接口”,泛指系统为应用程序提供的一系列函数接口。在编程的时候可以直接调用,而不必知道其内部实现的过程,只知道它的原型和返回值就可以了。SDK是英文Software Development Kit的缩写,意思是“软件开发工具包”,微软提供了许多专门的SDK开发包,比如DirectX开发包和语音识别开发包等等。1313网络安全编程概述网络安全编程概述网络安全编程概述网络安全编程概述 从理论上说,任何一门语言可以在任何一个操作系统上编程,C语言可以在Windows下编程,同样也可以在Linux下编程。编程是一项比较综合的工作,除了熟练使用编程工具以外,还要了解系统本

8、身的内部工作机理和编程语言。1414学习学习学习学习WindowsWindowsWindowsWindows下编程下编程下编程下编程学习语言,选择语言和工具是第一步,而且是非常重要的一步工作,目前的编程语言那么多,有C、C+、C#、Java和汇编语言等等。虽然有很多语言,只要精通一门就够了。从实用的角度来讲,C/C+是最好的选择,而微软公司的VisualC+和Insprise公司(原Borland公司)的C+Builder是其相应开发工具的两大主流。比较流行的是比较流行的是VC+6.0VC+6.0英文企业版英文企业版1515学习编程需要经历三大步学习编程需要经历三大步学习编程需要经历三大步学习

9、编程需要经历三大步1 1 1 1、读程序、读程序、读程序、读程序语言基础知识、查相关的资料,补充基础知识2 2 2 2、写程序、写程序、写程序、写程序编程贵在动手!要规范、循序渐进。3 3 3 3、积累功能代码、积累功能代码、积累功能代码、积累功能代码分类保存、代码库、效率及正确率。1616C C C C语言发展的四个阶段语言发展的四个阶段语言发展的四个阶段语言发展的四个阶段 1 1、面向过程的、面向过程的C C语言语言2 2、面向对象的、面向对象的C+C+语言语言3 3、SDKSDK编程编程4 4、MFCMFC编程编程1717面向过程的面向过程的面向过程的面向过程的C C C C语言语言语言

10、语言 C和C+的最主要区别是:C语言中没有类的概念,C+在C的语法基础上引入了类,所以C+和C的语法是基本相同的。#include void main()printf(Hello DOSn);1818读取命令行参数读取命令行参数读取命令行参数读取命令行参数main函数可以带参数,第一个参数是int型的,表示参数参数个数个数,第二个参数是字符指针数组,放命令行参数的内容参数的内容。#include int main(int argc,char*argv)int i;for(i=1;i argc;i+)printf(%sn,argvi);return 0;1919面向对象的面向对象的面向对象的面向

11、对象的C+C+C+C+语言语言语言语言面向对象程序设计语言可以将一些变量和函数封装到类中,当变量被类封装后,称之为属性或者数据成员,当函数被类封装后,称之为方法或者成员函数。定义好的一个类,然后定义一个类的实例,这个实例就叫做对象,在C+中可以用类定义对象.2020在在C+C+中使用类中使用类#includeclasspersonpublic:intheart;char*name;intrun()heart=heart+20;returnheart;voidmain()intiRunStop;personZhangSan;ZhangSan.name=张三;ZhangSan.heart=72;c

12、out姓名:ZhangSan.name endl;cout跑步前心跳 ZhangSan.heartendl;iRunStop=ZhangSan.run();cout跑步后心跳iRunStopendl;2121SDKSDKSDKSDK编程编程编程编程C库提供了许多函数,可以直接使用。如库提供了许多函数,可以直接使用。如DeleteFile函数来函数来删除一个文件。删除一个文件。#include#includeintmain()DeleteFile(C:test.txt);printf(删除成功n);return0;2222WindowsWindowsWindowsWindows内部机制内部机制内

13、部机制内部机制 Windows是一个“基于事件的,消息驱动的基于事件的,消息驱动的”操作系统。在Windows下执行一个程序,只要用户进行了影响窗口的动作(如改变窗口大小或移动、单击鼠标等)该动作就会触发一个相应的“事件”。系统每次检测到一个事件时,就会给程序发送一个“消息”,从而使程序可以处理该事件。每次检测到一个用户事件,程序就对该事件做出响应,处理完以后,再等待下一个事件的发生。2323WindowsWindows应用程序、操作系统、计算机硬件之间的相互关系应用程序、操作系统、计算机硬件之间的相互关系 Windows程序内部运行原理2424关于消息及消息队列关于消息及消息队列关于消息及消

14、息队列关于消息及消息队列 操作系统是怎样将感知到的事件传递给应用程序的呢?这是通操作系统是怎样将感知到的事件传递给应用程序的呢?这是通过过消息机制消息机制消息机制消息机制(Message)(Message)来实现的。操作系统将每个事件都包装来实现的。操作系统将每个事件都包装成消息的结构体成消息的结构体MSGMSG来传递给应用程序,来传递给应用程序,MSGMSG结构定义如下:结构定义如下:typedefstructtagMSGHWNDhWnd;/目标窗口句柄UINTmessage;/消息标识WPARAMwParam;/消息参数1(附加信息,16位)LPARAMlParam;/消息参数2(附加信息

15、,32位)DWORDtime;/消息发送时间POINTpt;/消息发送时鼠标的屏幕坐标MSG;2525从变量类型区分变量用途从变量类型区分变量用途从变量类型区分变量用途从变量类型区分变量用途int x,y;int x,y;x=30;x=30;y=30;y=30;/x/x和和y y既可以用来表示坐标点,也可以用来表示宽度和既可以用来表示坐标点,也可以用来表示宽度和高度,还可以用来表示身高和体重。高度,还可以用来表示身高和体重。typedef int WIDTHtypedef int WIDTHtypedef int HEIGHTtypedef int HEIGHTWIDTH x;WIDTH x;

16、HEIGHT y;HEIGHT y;/好处:好处:我们从变量的类型上就可以知道我们从变量的类型上就可以知道x x和和y y是用来表是用来表示宽度和高度。示宽度和高度。2626编写窗口应用程序编写窗口应用程序编写窗口应用程序编写窗口应用程序#include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR szCmdLine,int iCmdShow)MessageBox(NULL,Hello,Windows!,HelloMsg,MB_OK);return 0;在在projectproject中选中选Win32

17、 ApplicationWin32 Application示例示例12727WinMainWinMainWinMainWinMain函数函数函数函数 Windows程序的入口函数int WINAPI WinMain(HINSTANCE hInstance,/handle to current instance HINSTANCE hPrevInstance,/handle to previous instance LPSTR lpCmdLine,/command line int nCmdShow /window show state);2828编写窗口应用程序编写窗口应用程序编写窗口应用程序

18、编写窗口应用程序hInstance:是当前实例的句柄这里表示应用程序本身;hPrevInstance:总是为NULL。在Windows早期版本中,当多次同时运行同一个程序时,系统会创建该程序的多个“实例”,同一程序的所有实例共享代码和内存。程序需要检查hPrevInstance来判断自身的其他实例是否正在运行,以便从已经存在的实例中获取数据。在32位版本中,统一程序运行方式改变了,不再需要了!2929编写窗口应用程序编写窗口应用程序编写窗口应用程序编写窗口应用程序lpCmdLine:是运行程序的命令行用于接受并存放程序运行时所需的参数nCmdShow:用于指定程序窗口最初的显示模式可以正常显示

19、,也可以在初始化就最大化或者最小化。3030窗口的创建窗口的创建窗口的创建窗口的创建 创建一个完整的窗口需要经过下面四个操作步骤:1.设计一个窗口类;2.注册窗口类;3.创建窗口;4.显示及更新窗口。31311 1 1 1、设计窗口类、设计窗口类、设计窗口类、设计窗口类typedef struct _WNDCLASS UINT style;/窗口样式 WNDPROC lpfnWndProc;/指向窗口过程函数 int cbClsExtra;/窗口类的附加内存空间(0)int cbWndExtra;/窗口的附加内存空间(0)HANDLE hInstance;/指向程序的实例句柄 HICON hI

20、con;/指向图标的句柄 HCURSOR hCursor;/指向光标的句柄 HBRUSH hbrBackground;/背景画刷句柄 LPCTSTR lpszMenuName;/菜单资源名 LPCTSTR lpszClassName;/指定窗口类的名称 WNDCLASS;3232窗口类的类型窗口类的类型窗口类的类型窗口类的类型窗口类的类型窗口类的类型补充知识:补充知识:在程序中经常要用到一类变量,这个变量里的每一位(bit)都对应某一种特性。当该变量的某位为1时,表示有该位对应的那种特性,当该位为0时,即没有该位所对应的特性。当变量中的某几位同时为1时,就表示同时具有几种特性的组合。一个变量中

21、的哪一位代表哪种意义,不容易记忆,所以我们经常根据特征的英文拼写的大写去定义一些宏,该宏所对应的数值中仅有与该特征相对应的那一位(bit)为1,其余的bit都为0。3333窗口类的类型窗口类的类型窗口类的类型窗口类的类型窗口类的类型窗口类的类型使用goto definition,发现CS_VREDRAW=0 x0001,CS_HREDRAW=0 x0002,CS_DBLCLKS=0 x0008,CS_NOCLOSE=0 x0200。共同点就是只有一位为共同点就是只有一位为1 1,其余位都为,其余位都为0 0。如果希望某一变量的值既有CS_VREDRAW又有CS_HREDRAW特性,可使用或或或

22、或运算,如:style=CS_VREDRAW|CS_HREDRAW;如果希望在某一变量原有的几个特征上去掉其中一个特征,用取反取反取反取反()之后再进行与与与与(&)运算。如在刚才的style的基础上去掉CS_NOCLOSE特征,可以用:style=style&CS_NOCLOSE;3434窗口过程函数窗口过程函数窗口过程函数窗口过程函数lpfnWndProc:指定了这一类型窗口的过程函数,也称回调函数。回调函数的原理:当应用程序收到给某一窗口的消息时,就应该调用某一函数来处理这条消息。这一调用过程不用应用程序自己来实施,而由操作系统来完成,但是,回调函数本身的代码必须由应用程序自己完成。对于

23、一条消息,操作系统到底调用应用程序中的哪个函数(回调函数)来处理呢?操作系统调用的就是接受消息的窗口所属的类型中的lpfnWndProc成员指定的函数。每一种不同类型的窗口都有自己专用的回调函数,该函数就是通过lpfnWndProc成员指定的。3535窗口过程函数窗口过程函数窗口过程函数窗口过程函数举例:汽车厂家生产汽车好比应用程序创建窗口,用户使用汽车好比操作系统管理窗口,某种汽车在销售前就指定好了修理站(类似回调函数),当用户的汽车出现故障后(类似窗口收到消息),汽车用户(类似操作系统)自己直接找到修理站去修理,不用厂家(类似应用程序)亲自将车送到修理站去修理,但修理站还得由厂家事先建造好

24、。3636设计窗口类的示例代码设计窗口类的示例代码设计窗口类的示例代码设计窗口类的示例代码WNDCLASSWNDCLASSwndcls;wndcls.style=CS_HREDRAW|CS_VREDRAW;wndcls.cbClsExtra=0;wndcls.cbWndExtra=0;wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);wndcls.hCursor=LoadCursor(NULL,IDC_CROSS);wndcls.hIcon=LoadIcon(NULL,IDI_ERROR);wndcls.hInstance=hIn

25、stance;wndcls.lpfnWndProc=WindowProc;wndcls.lpszClassName=xiexin2006;wndcls.lpszMenuName=NULL;37372 2 2 2、注册窗口类、注册窗口类、注册窗口类、注册窗口类刚才有:WNDCLASSWNDCLASSwndcls;所以:所以:RegisterClass(&wndcls);ATOM RegisterClass(CONST WNDCLASS*lpWndClass);参数lpWndClass:设计窗口类的对象指针38383 3 3 3、创建窗口、创建窗口、创建窗口、创建窗口HWND CreateWind

26、ow(LPCTSTR lpClassName,/1.pointer to registered class name LPCTSTR lpWindowName,/2.pointer to window name DWORD dwStyle,/3.window style int x,/4.horizontal position of window int y,/5.vertical position of windowint nWidth,/6.window width int nHeight,/7.window height HWND hWndParent,/8.handle to pare

27、nt or owner window HMENU hMenu,/9.handle to menu or child-window identifier HANDLE hInstance,/10.handle to application instance LPVOID lpParam/11.pointer to window-creation data);3939创建窗口创建窗口创建窗口创建窗口的示例代码的示例代码的示例代码的示例代码HWNDhwnd;hwnd=CreateWindow(xiexin2006,Mywindow,WS_OVERLAPPEDWINDOW,0,0,600,400,NU

28、LL,NULL,hInstance,NULL);注:创建成功后,返回系统分配给窗口句柄,否则返回NULL。因此要用一个句柄变量(如hwnd)来保存WS_OVERLAPPEDWINDOW类型类型的窗口具有:Creates an overlapped window with the WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU,WS_THICKFRAME,WS_MINIMIZEBOX,and WS_MAXIMIZEBOXstyles.40404 4 4 4、显示及更新窗口、显示及更新窗口、显示及更新窗口、显示及更新窗口BOOL ShowWindowShowWindow(H

29、WND hWnd,/窗口创建成功后的句柄 int nCmdShow /窗口显示状态);BOOL UpdateWindowUpdateWindow(HWND hWnd /窗口创建成功后的句柄);ShowWindow(hwnd,SW_SHOWNORMAL);UpdateWindow(hwnd);还有:还有:SW_MAXIMIZE,SW_SHOWMAXIMIZED SW_SHOWMINIMIZED SW_SHOWDEFAULT 等4141创建窗口创建窗口创建窗口创建窗口的示例代码的示例代码的示例代码的示例代码HWNDhwnd;hwnd=CreateWindow(xiexin2006,Mywindow

30、,WS_OVERLAPPEDWINDOW,0,0,600,400,NULL,NULL,hInstance,NULL);WS_OVERLAPPEDWINDOW类型类型的窗口具有:Creates an overlapped window with the WS_OVERLAPPED,WS_CAPTION,WS_SYSMENU,WS_THICKFRAME,WS_MINIMIZEBOX,and WS_MAXIMIZEBOXstyles.4242WindowsWindowsWindowsWindows消息循环消息循环消息循环消息循环消息队列和在应用程序中的轮询处理 4343WindowsWindowsW

31、indowsWindows消息循环消息循环消息循环消息循环BOOL GetMessage(LPMSG lpMsg,/指向消息结构体的地址 HWND hWnd,/接收消息的窗口句柄 UINT wMsgFilterMin,/消息的最小值(一般取0)UINT wMsgFilterMax /消息的最大值(一般取0);后两个参数若都设为0,则接收所有消息;接收到除WM_QUIT 外的消息均返回非0值;对于WM_QUIT返回0,出现错误返回1。4444WindowsWindowsWindowsWindows消息循环消息循环消息循环消息循环MSG msg;while(GetMessage(&msg,NULL

32、,0,0)TranslateMessage(&msg);DispatchMessage(&msg);return msg.wParam;TranslateMessage(&msg):将虚拟键消息转换为字符消息DispatchMessage(&msg):把消息投递到窗口过程4545窗口过程函数窗口过程函数窗口过程函数窗口过程函数LRESULT CALLBACK WindowProc(HWND hwnd,/消息的窗口句柄 UINT uMsg,/消息代码 WPARAM wParam,/消息的附加参数1 LPARAM lParam /消息的附加参数2);该函数内部主要通过switch-case来确定窗

33、口接收的是什么消息,以及如何处理这些消息。4646窗口过程函数示例代码窗口过程函数示例代码窗口过程函数示例代码窗口过程函数示例代码LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)switch(uMsg)case WM_LBUTTONDOWN:MessageBox(hwnd,mouse clicked,message,0);break;case WM_CLOSE:DestroyWindow(hwnd);break;case WM_DESTROY:PostQuitMessage(0);break

34、;default:return DefWindowProc(hwnd,uMsg,wParam,lParam);return 0;4747总结总结总结总结:SDK:SDK:SDK:SDK开发程序的步骤开发程序的步骤开发程序的步骤开发程序的步骤 1、包含相关头文件,如window.h及stdio.h等2、写WinMain()入口函数A、设计一个窗口类(WNDCLASS)B、注册窗口类(RegisterClass)C、创建窗口(CreateWindow)D、显示及更新窗口(ShowWindowUpdateWindow)E、消息循环(获取、转换、投递消息函数)3、写窗口过程函数用switch来接收各类

35、消息并作相应处理示例示例24848利用利用利用利用SDKSDKSDKSDK函数创建窗口函数创建窗口函数创建窗口函数创建窗口#include#includeWNDCLASSwc;HWNDh_wnd;MSGmsg;/*消息处理函数消息处理函数wndProc的声明的声明*/longWINAPIWindowProc(HWND,UINT,WPARAM,LPARAM);/*winMain函数函数*/intPASCALWinMain(HINSTANCEh_CurInstance,HINSTANCEh_PrevInstance,LPSTRp_CmdLine,intm_Show)wc.lpfnWndProc=W

36、indowProc;wc.hInstance=h_CurInstance;wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wc.lpszClassName=ECJTU;4949利用利用利用利用SDKSDKSDKSDK函数创建窗口函数创建窗口函数创建窗口函数创建窗口 RegisterClass(&wc);/注册窗口类h_wnd=CreateWindow(ECJTU,My Window,WS_OVERLAPPEDWINDOW,0,0,400,500,0,0,h_CurInstance,0);/创建窗口/显示窗口ShowWindow(h_wn

37、d,SW_SHOWMAXIMIZED);UpdateWindow(h_wnd);/更新窗口/消息循环while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMessage(&msg);return(msg.wParam);5050利用利用利用利用SDKSDKSDKSDK函数创建窗口函数创建窗口函数创建窗口函数创建窗口 LRESULTCALLBACKWindowProc(HWNDhwnd,UINTuMsg,WPARAMwParam,LPARAMlParam)switch(uMsg)caseWM_LBUTTONDOWN:Messa

38、geBox(hwnd,mouseclicked,message,0);break;caseWM_CLOSE:DestroyWindow(hwnd);break;caseWM_DESTROY:PostQuitMessage(0);break;default:returnDefWindowProc(hwnd,uMsg,wParam,lParam);return0;示例示例35151MFCMFCMFCMFC编程编程编程编程 SDK的功能非常强大,需要记很多的函数,当面向对象编程成为主流的时候,微软将SDK的函数分类进行封装,这就是MFC(MicrosoftFoundationClass)MFC中,函

39、数名及其用法与SDK中基本一致。可多参考MSDN。5252MFCMFCMFCMFC编程基础编程基础编程基础编程基础#includeclasssample:publicCFrameWndpublic:sample()/构造函数构造函数Create(NULL,MyWindow);MessageBox(MyWindow,CFrameconstructor);classApp:publicCWinApppublic:BOOLInitInstance();BOOLExitInstance();BOOLApp:InitInstance()/InitInstance函数的定义函数的定义/MessageBox

40、(0,MyWindow,InitInstance,MB_OK|MB_ICONASTERISK);5353MFCMFCMFCMFC编程基础编程基础编程基础编程基础sample*obj;obj=newsample;m_pMainWnd=obj;obj-ShowWindow(SW_SHOWMAXIMIZED);returnTRUE;BOOLApp:ExitInstance()/ExitInstance函数定义函数定义MessageBox(0,MyWindow,ExitInstance,MB_OK|MB_ICONHAND);returnTRUE;/创建应用程序对象创建应用程序对象Appappobjec

41、t;示例示例45454MFCMFCMFCMFC编程基础编程基础编程基础编程基础5555MFCMFCMFCMFC事件处理机制事件处理机制事件处理机制事件处理机制#includeclasssample:publicCFrameWndpublic:sample()/构造函数构造函数Create(NULL,MyWindow);voidOnLButtonDown(UINT,CPoint)MessageBox(LeftButton,Hello,0);DECLARE_MESSAGE_MAP();BEGIN_MESSAGE_MAP(sample,CFrameWnd)ON_WM_LBUTTONDOWN()END

42、_MESSAGE_MAP()/消息映射消息映射示例示例55656网络安全编程网络安全编程网络安全编程网络安全编程 网络安全基础编程技术主要包括:网络安全基础编程技术主要包括:网络安全基础编程技术主要包括:网络安全基础编程技术主要包括:Socket编程注册表编程文件系统编程定时器编程驻留程序编程多线程编程。5757SocketSocketSocketSocket编程编程编程编程网络安全编程离不开网络编程,凡基于网络应用的程序都离不开Socket。Socket的意思是套接字,是计算机与计算机之间通信的接口。它的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序。使用Winsoc

43、k提供的API函数是最基本的网络编程技术。5858基本概念基本概念基本概念基本概念套接字:描述的是主机间的进程通信机制。提供了进程通信的入口点。套接字用一个半相关描述:(协议,本地主机地址,本地端口)(协议,本地主机地址,本地端口)一个套接字半相关包含本地主机地址、端口号、使用协议类型。一个完整的套接字连接则用一个相关描述:(协议,本地主机地址,本地端口,远地主机地址,远地(协议,本地主机地址,本地端口,远地主机地址,远地端口)端口)一个套接字相关则包含本地主机地址、本地端口号、远地一个套接字相关则包含本地主机地址、本地端口号、远地主机地址、远地端口号以及使用的协议类型。主机地址、远地端口号以

44、及使用的协议类型。5959套接字套接字套接字套接字(socket)(socket)(socket)(socket)的引入的引入的引入的引入随着Unix的应用推广,套接字套接字套接字套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows等操作系统,成为开发网络应用程序的非常有效快捷的工具。套接字存在于通信区域中。通信区域也叫地址族通信区域也叫地址族通信区域也叫地址族通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。套接字通常只与同一区域的套接字交换数据。WindowsSockets只支持一个通信区域:网际域(AF_INET),这个域

45、被使用网际协议簇通信的进程使用。6060网络字节顺序网络字节顺序网络字节顺序网络字节顺序不同的计算机存放多字节值的顺序不同,有的机器在起始地址存放低位字节(低位先存低位先存低位先存低位先存),有的机器在起始地址存放高位字节(高位先存高位先存高位先存高位先存)。基于Intel的CPU(即PCPC机)采用的是低位先存低位先存低位先存低位先存。而网络中的TCP/IP协议使用16位整数和32位整数的高位先存高位先存高位先存高位先存格式。为保证数据的正确性,在网络协议中需要指定网络字节顺序。6161客户机服务器模式客户机服务器模式客户机服务器模式客户机服务器模式在TCP/IP网络应用中,通信的两个进程间

46、相互作用的主要模式是客户机/服务器模式(client/server),即客户向服务器提出请求,服务器接收到请求后,提供相应的服务。客户机/服务器模式的建立基于两个原因:1、网络中软硬件资源、运算能力和信息不均等2、网间进程通信完全是异步的。C/S模式在操作过程中采取的是主动请求方式。模式在操作过程中采取的是主动请求方式。6262客户机服务器模式客户机服务器模式客户机服务器模式客户机服务器模式首先服务器方要先启动,并根据请求提供相应的服务首先服务器方要先启动,并根据请求提供相应的服务:打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求。等待客户请求到达该端口。接收到重复服务请求

47、,处理该请求并发送应答信号。接收到并发服务请求,要激活一个新的进程(或线程)来处理这个客户请求。新进程(或线程)处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。返回第二步,等待另一客户请求。关闭服务器。6363客户机服务器模式客户机服务器模式客户机服务器模式客户机服务器模式客户方:客户方:打开一个通信通道,并连接到服务器所在主机的特定端口。向服务器发服务请求报文,等待并接收应答;继续提出请求。请求结束后关闭通信通道并终止。6464Windows SocketsWindows SocketsWindows SocketsWindows Sockets

48、的实现的实现的实现的实现Windows SocketsWindows Sockets是Windows的网络程序设计接口,它是从BerkeleySockets扩展而来的,以动态链接库动态链接库动态链接库动态链接库的形式提供。在继承了BerkeleySockets主要特征的基础上,又对它进行了重要扩充,如一些异步函数异步函数异步函数异步函数及符合Windows消息驱动特性的网络事件异步选择机制网络事件异步选择机制网络事件异步选择机制网络事件异步选择机制。WindowsSockets1.1和BerkeleySockets都是基于TCP/IP协议的;Sockets2从Sockets1.1发展而来,与协

49、议与协议与协议与协议无关并向下兼容无关并向下兼容无关并向下兼容无关并向下兼容,可以使用任何底层传输协议提供的通信能力,来为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正实现了底层网络通讯对应用程序的透明。6565套接字的类型套接字的类型套接字的类型套接字的类型1、流式套接字(、流式套接字(SOCK_STREAM)提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。2、数据报式套接字(、数据报式套接字(SOCK_DGRAM)提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。3、原始套接字(、原始套接字(SOCK_RAW)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁