信息系统技术基础-Windows消息机制

上传人:知*** 文档编号:62169754 上传时间:2022-03-14 格式:PPT 页数:59 大小:640.50KB
收藏 版权申诉 举报 下载
信息系统技术基础-Windows消息机制_第1页
第1页 / 共59页
信息系统技术基础-Windows消息机制_第2页
第2页 / 共59页
信息系统技术基础-Windows消息机制_第3页
第3页 / 共59页
资源描述:

《信息系统技术基础-Windows消息机制》由会员分享,可在线阅读,更多相关《信息系统技术基础-Windows消息机制(59页珍藏版)》请在装配图网上搜索。

1、信息系统2 01-Windows消息机制信息系统技术基础信息系统技术基础-2授课老师: 王志宏;王长军实验老师: 王长军信息系统2 01-Windows消息机制Contact InformationlName: 王长军lOffice: 721lTel: 62378372(O); (M)lEmail: lPersonal Informationl2007-Present 物流系, DHUl2005-2006 Computer System Division, SECl2002-2005 SJTU信息系统2 01-Windows消息机制课程概要企业信息化、政府信息化和社会信息化孕育着巨大的软件市场

2、企业信息化、政府信息化和社会信息化孕育着巨大的软件市场新技术(新技术(IPV6、3G、移动、移动IP、Wibro、蓝牙、蓝牙、RFID)驱动软件市场)驱动软件市场新商业模式(新商业模式(E-Commerce、M-Commerce)拉动软件市场)拉动软件市场信息系统2 01-Windows消息机制课程概要l王志宏l操作系统相关l王长军l软件项目开发基础lWindows API编程基础(消息机制;进程/线程;图形接口)l软件项目实施基础信息系统2 01-Windows消息机制Windows消息机制王长军2007年7月信息系统2 01-Windows消息机制讲授内容l1. 课程背景课程背景l2. W

3、indows程序的特点程序的特点l3. 事件与消息系统事件与消息系统 l4. Windows程序的基本结构程序的基本结构l5. 实验实验:利用利用API 开发开发Windows程序实例程序实例信息系统2 01-Windows消息机制1.1 预备知识lWindows操作系统:用过吧!用过吧!l一门编程语言:C/VB,学过吧!,学过吧!(C#, Java, Delphi)l一个适合Windows程序设计的编译器和开发环境:Microsoft Visual C+ 6.0/ Visual Basic 6.0 信息系统2 01-Windows消息机制1.2 课程目标l不是编程lAPI (Applicat

4、ion Programming Interface)而不是MFC (Microsoft Foundation Class)l消化”消息”信息系统2 01-Windows消息机制1.3 Windows相关 lAPI 就是应用程序编程接口。它是能用来操作组件、应用程序或者操作系统的一组函数。典型的情况下,API 由一个或多个提供某种特殊功能的 DLL 组成l每个 Windows 应用程序都直接或间接地使用了 Windows API l随着 Windows 操作系统的发展,Windows API的内容也在不断扩充之中信息系统2 01-Windows消息机制1.3 Windows相关 MS-DOSIB

5、M-PC有限的I/O函数1981OS硬件MS1.03.016bit HWAPI函数1983图形环境NTXP16/32bit HWAPI函数1993图形环境Vista32/64bit HWAPI函数20063D图形环境过程驱动过程驱动消息驱动消息驱动信息系统2 01-Windows消息机制1.3 Windows相关 NTXP32bit HWAPI函数1993图形环境Vista32/64bit HWAPI函数20063D图形环境MFC (Microsoft Foundation Class Library )WPF (Windows Presentation Foundation )WCF (Wi

6、ndows Communication Foundation)WWF (Windows Workflow Foundation) 信息系统2 01-Windows消息机制1.3 Windows相关 lDOS与Windows驱动机制的区别lDOS是过程驱动l在等待用户输入过程中,所有输入设备(资源)都被“等待”过程抢占了。lWindows是消息(事件)驱动信息系统2 01-Windows消息机制2. Windows程序的特点 l2.1图文图文l2.2消息消息l2.3整合整合信息系统2 01-Windows消息机制2.1 图文l1不仅是黑底白字不仅是黑底白字l2. 而是而是 l框架菜单按钮滚动条框

7、架菜单按钮滚动条l称为窗口要素称为窗口要素l3. 窗口类型窗口类型 lConsole 文字类型文字类型lWindow 菜单菜单+用户区域用户区域lDialoglMessage Boxl4. 实现途径实现途径GDI(图形设备接口,(图形设备接口,GDI32.dll)信息系统2 01-Windows消息机制2.2 消息l不再是循规蹈矩不再是循规蹈矩 而是而是Message based, event drivenl窗口程序的主要任务是人机交互l除非人主动结束任务,程序以while循环为主体框架l人不断进行各种输入,计算机不断响应,形成“输入”“响应”的程序结构信息系统2 01-Windows消息机制

8、2.2 消息l各种类型的“输入”,以消息格式存在lGetMessage()取走一个消息l对事件的响应,即事件驱动lDispatchMessage()处理消息l实现途径实现途径User32.dll信息系统2 01-Windows消息机制2.3 整合lMS Windows结构lOS系统服务(KERNEL):内存管理、程序加载(包括DLL)、任务调度、文件管理l用户接口(USER):窗口和消息管理,以及菜单、控制、对话框、定时器等l图形设备接口(GDI, Graphic Device Interface):管理显示器,为USER与应用程序提供与硬件设备独立的接口l对应的,API函数也分为三类:l系统

9、服务;管理和图形设备函数信息系统2 01-Windows消息机制2.3 整合信息系统2 01-Windows消息机制3. 事件与消息系统l3.1事件和事件驱动事件和事件驱动l3.2消息系统消息系统l3.3一个具体的窗口程序一个具体的窗口程序信息系统2 01-Windows消息机制3.1 事件和事件驱动lWindows程序为消息而“生”,因消息而“死”l那么,消息从何而来? Windows操作环境中,无论是系统产生的动作或用户运行应用程序产生的动作,称为事件(Events)产生的消息(Message)。 l那么,事件又从何而来?l通过输入设备,如键盘和鼠标l通过屏幕上可视的对象,如菜单、工具栏按

10、钮、滚动条和对话框上的控件l来自Windows内部信息系统2 01-Windows消息机制基于事件驱动的程序模型3.1 事件和事件驱动开始执行初始化从消息队列取得一个消息终止执行当前消息是否“退出”消息?是否本程序要处理的消息?默认处理处理消息YNYN信息系统2 01-Windows消息机制Windows消息系统的组成消息系统的组成 消息队列 消息循环 窗口过程3.2 消息系统信息系统2 01-Windows消息机制消息的数据结构消息的数据结构消息的数据结构MSG的定义如下:typedef struct tagMSG HWND hwnd; /用以检索消息的窗口句柄 UINT message;/

11、消息值 WPARAM wParam;/包含有关消息的附加信息LPARAM lParam; /随不同的消息而有所不同DWORD time;/消息送到队列的时间POINT pt; /消息发送时,屏幕光标的位置MSG;3.2 消息系统信息系统2 01-Windows消息机制 Windows常用消息常用消息WM_LBUTTONDOWN:单击鼠标左键时产生的消息;WM_LBUTTONUP:放开鼠标左键时产生的消息;WM_RBUTTONDOWN:单击鼠标右键时产生的消息;WM_RBUTTONUP:放开鼠标右键时产生的消息;WM_LBUTTONDBLCLK:双击鼠标左键时产生的消息;WM_RBUTTONDB

12、LCLK:双击鼠标右键时产生的消息;WM_CREATE:CreateWindows()函数产生的消息;WM_CLOSE:关闭窗口时产生的消息;WM_QUIT:退出应用程序时由PostQuitMessage()发出的消息;WM_PAINT:Windows系统需要重绘时产生的消息。 3.2 消息系统信息系统2 01-Windows消息机制3.2 消息系统消息队列消息队列l消息队列是系统定义的内存块,用于临时存储消息;或是把消息直接发给窗口过程l在16位的系统中系统中只有一个消息队列l32位的系统中每一运行的程序都会有一个消息队列信息系统2 01-Windows消息机制用户交互内核USER窗口1窗口

13、函数WndProc消息队列窗口2窗口函数WndProc消息队列支持队列特征的消息驱动模型 3.2 消息系统消息队列消息队列信息系统2 01-Windows消息机制3.2 消息系统什么是消息循环什么是消息循环while(GetMessage(&Msg, NULL, 0, 0) 0) TranslateMessage(&Msg); DispatchMessage(&Msg); 信息系统2 01-Windows消息机制3.2 消息系统Windows消息处理示意图消息处理示意图Windows系统应用程序队列A应用程序队列B系统队列事件输入WinMain函数消息循环窗口函数1窗口函数2WinMain函数

14、消息循环窗口函数1窗口函数2应用程序A应用程序B消息循环消息循环信息系统2 01-Windows消息机制3.3 一个具体的窗口程序信息系统2 01-Windows消息机制4. Win32程序的基本结构 l4.1. Windows程序组成l4.2. 详解入口,窗口,消息l4.3. Windows数据类型l4.4. Windows程序的“生生死死”信息系统2 01-Windows消息机制lWinMain()程序入口点l注册窗口 RegisterClass()l生成并显示窗口 CreateWindow() ShowWindow()l消息循环lWndProc()窗口函数(功能实现)l区分消息 swit

15、chl根据消息触发相应处理l调用DefWindowProc()不处理的消息、和需要系统进一步处理的消息如WM_CLOSE,使用者关闭了窗口。应用程序获得这个消息后,释放了自己的资源,然后让系统进一步执行关闭窗口的动作4.1. Windows程序组成 信息系统2 01-Windows消息机制4.2. 详解入口 信息系统2 01-Windows消息机制4.2. 详解入口 WinMain函数的原型如下:int WINAPI WinMain (HINSTANCE hInstance, / 当前实例句柄当前实例句柄HINSTANCE hPrevInstance, / 以前的实例句柄以前的实例句柄LPST

16、R lpCmdLine, / 指向命令行参数的指针指向命令行参数的指针int nCmdShow ) / 窗口的显示状态窗口的显示状态信息系统2 01-Windows消息机制初始化包括初始化包括l定义窗口l注册窗口l创建窗口l显示窗口 需要注意的是,在显示窗口ShowWindow函数后,需调用UpdateWindow()函数更新并绘制用户区,并发出WM_PAINT消息。4.2. 详解窗口 信息系统2 01-Windows消息机制l注册窗口RegisterClass( ) 在注册之前可以设置窗口属性,系统会给出一些缺省值,我们重点关心其中的lpfnWndProc参数4.2. 详解窗口 信息系统2

17、01-Windows消息机制lCreateWindow()lShowWindow()lUpdateWindow()4.2. 详解窗口 HWND CreateWindow( LPCTSTR lpClassName, / 已注册的窗口类名 LPCTSTR lpWindowName, / 窗口标题 DWORD dwStyle, / 窗口风格 int x, / 窗口的水平位置 int y, / 窗口的垂直位置 int nWidth, / 窗口宽度 int nHeight, / 窗口高度 HWND hWndParent, / 父窗口句柄 HMENU hMenu, / 菜单句柄或控件标识 HINSTANC

18、E hInstance, / 应用程序实例句柄 LPVOID lpParam ) / 其他窗口创建时的参数数据信息系统2 01-Windows消息机制l消息l本身是一个无符号整型变量l类型有lWM_COMMAND:系统命令类,菜单选择,按钮等lWM_PAINT: 对窗口作图lWM_DESTORY: 关闭窗口lWM_USER: 用户可自定义一些消息l在某个特定类型之下,更有许多事件,一般通过wParam通知4.2. 详解消息信息系统2 01-Windows消息机制while(GetMessage(&msg) TranslateMessage(&msg);/消息转换 DispatchMessage

19、(&msg); lGetMessage具有阻塞机制l当消息队列中没有消息时,程序非忙等,而是让权等待l当收到WM_QUIT时,GetMessage返回false,循环停止,同时应用程序终止。lDispatchMessagel通过USER模块协助,将消息传递到WndProclWndProc的调用指示在注册窗口类时,已向系统指明4.2. 详解消息采集 信息系统2 01-Windows消息机制4.2. 详解消息处理 l消息处理函数是用于处理特定消息的一些代码,一般包括一个多分支switch语句结构。信息系统2 01-Windows消息机制4.2. 详解消息处理 信息系统2 01-Windows消息机

20、制4.2. 详解消息处理 窗口程序的可能结构产生消息产生消息在窗口中显示在窗口中显示信息系统2 01-Windows消息机制4.3. Windows数据类型 Windows数据类型数据类型对应的基本数据对应的基本数据类型类型(C语言语言)说明说明BOOLbool布尔值BSTRunsigned short *32位字符指针BYTEunsigned char8位无符号整数COLORREFunsigned long用作颜色值的32位值DWORDunsigned long32位无符号整数,段地址和相关的偏移地址LONGlong32位带符号整数LPARAMlong作为参数传递给窗口过程或回调函数的32位

21、值LPCSTRconst char *指向字符串常量的32位指针LPSTRchar *指向字符串的32位指针LPVOIDvoid *指向未定义类型的32位指针LRESULTlong来自窗口过程或回调函数的32位返回值UINTunsigned int32位无符号整数WORDunsigned short16位无符号整数WPARAMunsigned int当作参数传递给窗口过程或回调函数的32位值信息系统2 01-Windows消息机制l Windows将使用的所有类型定义在Windows.h文件和其相关的文件中。l一些常用的类型有句柄(HANDLE)、窗口句柄(HWND)、字符(BYTE)、短整数

22、(WORD)、布尔型(BOOL)、字符串指针(LPSTR)以及常量字符串指针(LPCSTR)等。lHANDLE是一个用作句柄的32位整数,句柄是代表某些资源的简单的数值,所有的句柄类型以H开头。 l凡是数据类型的前缀是前缀是P或或LP,则表示该类型是一个指针或长指针数据类型指针或长指针数据类型。若前缀是前缀是U,则表示无符号,则表示无符号数据类型数据类型,等等。4.3. Windows数据类型 信息系统2 01-Windows消息机制l程序初始化过程中调用CreateWindow,为程序创建了一个窗口,CreateWindow送出WM_CREATE直接给窗口函数,后者可以在此时做些初初始化始化

23、操作;l在程序运行过程中,不断以GetMessage从消息队列中取得消息。如果这个如果这个消息是消息是WM_QUIT,GetMessage会得到会得到false的返回值而结束循环,进而结的返回值而结束循环,进而结束整个程序;束整个程序;lDispatchMessage通过系统USER模块的协助与监督,把消息分派至窗口函数,消息将被处理;l程序不断循环;l当使用者按下系统菜单中的Close命令时,系统送出WM_CLOSE,通常窗口程序不处理它,由DefWindowProc处理;lDefWindowProc处理WM_CLOSE,调用DestoryWindow把窗口清除,送出WM_DESTORY;l

24、窗口程序对WM_DESTORY的处理是调用PostQuitMessage;lPostQuitMessage送出WM_QUIT,于是WinMain的循环结束了,整个应用程序也结束了。4.4. Windows程序的“生生死死” 信息系统2 01-Windows消息机制4.4. Windows程序的“生” 信息系统2 01-Windows消息机制4.4. Windows程序的“死” 信息系统2 01-Windows消息机制下面介绍建立基于API的应用程序框架的步骤。l(1) 在File下拉菜单中选择New选项,以建立项目文件。l(2) 在弹出的New对话框中,选择Projects选项卡,并选择其中的

25、Win32 Application项,在Project Name编辑框中填人所要创建的项目文件名Myapi,然后单击OK按钮。l(3) 此时弹出如后图所示的界面,选择其中的An empty project选项,说明是创建一个空的项目文件。5. 实验:利用API开发Win32程序实例信息系统2 01-Windows消息机制Win32 Application Step 1 of 1对话框5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制New Project Information对话框5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制空的W

26、in32应用程序框架界面 5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制Insert Files into Project对话框 5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制Windows窗口程序的运行结果 5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制源程序代码如下:#include /窗口函数说明LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);/初始化窗口类/WinMain函数说明int WINAPI WinMain(HINSTANCE hI

27、nstance,HINSTANCE hPrevInst, LPSTR lpszCmdLine, int nCmdShow) HWND hwnd ;MSG Msg ;WNDCLASS wndclass ;char lpszClassName = “窗口”;/窗口类名char lpszTitle= My_Windows; /窗口标题名5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制wndclass.style = 0; /窗口类型为缺省类型wndclass.lpfnWndProc = WndProc ;/窗口处理函数为WndProcwndclass.cbClsExtr

28、a= 0 ; /窗口类无扩展wndclass.cbWndExtra= 0 ;/窗口实例无扩展wndclass.hInstance = hInstance ; /当前实例句柄wndclass.hIcon = LoadIcon( NULL, IDI_APPLICATION) ; /窗口的最小化图标为缺省wndclass.hCursor = LoadCursor( NULL, IDC_ARROW) ; /窗口采用箭头光标 wndclass.hbrBackground= (HBRUSH)GetStockObject( WHITE_BRUSH) ; /窗口背景为白色 wndclass.lpszMenuN

29、ame = NULL ; /窗口中无菜单 wndclass.lpszClassName = lpszClassName;/窗口类名为“窗口示例” /窗口类注册 if( !RegisterClass( &wndclass) /如果注册失败,则发出警告声音MessageBeep(0) ;return FALSE ;5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制/创建窗口hwnd=CreateWindow(lpszClassName,/窗口类名lpszTitle, /窗口实例的标题名WS_OVERLAPPEDWINDOW, /窗口的风格CW_USEDEFAULT,CW

30、_USEDEFAULT, /窗口左上角坐标为缺省值CW_USEDEFAULT, CW_USEDEFAULT, /窗口的高和宽为缺省值NULL, /此窗口无父窗口NULL, /此窗口无主菜单hInstance, /创建此窗口的应用程序的当前句柄NULL) ; /不使用该值/显示窗口ShowWindow( hwnd, nCmdShow) ;5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制/绘制用户区UpdateWindow(hwnd); /消息循环 while( GetMessage(&Msg, NULL, 0, 0) TranslateMessage( &Msg)

31、; /将消息的虚拟键转换为字符信息 DispatchMessage( &Msg) ;/将消息传送到指定窗口return Msg.wParam;/消息循环结束即程序终止时将信息返回系统 5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制/窗口函数LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam, LPARAM lParam) switch(message) case WM_DESTROY: PostQuitMessage(0); /调用PostQuitMessage发出WM_QUIT消息 default: /默认时采用系统消息默认处理函数 return DefWindowProc(hwnd,message,wParam,lParam); return (0);5. 利用API开发Win32程序实例信息系统2 01-Windows消息机制谢谢!谢谢!此课件下载可自行编辑修改,供参考!此课件下载可自行编辑修改,供参考!感谢你的支持,我们会努力做得更好!感谢你的支持,我们会努力做得更好!

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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