信息系统2 01-Windows消息机制

上传人:资****亨 文档编号:136306394 上传时间:2020-06-27 格式:PPT 页数:58 大小:629.50KB
返回 下载 相关 举报
信息系统2 01-Windows消息机制_第1页
第1页 / 共58页
信息系统2 01-Windows消息机制_第2页
第2页 / 共58页
信息系统2 01-Windows消息机制_第3页
第3页 / 共58页
信息系统2 01-Windows消息机制_第4页
第4页 / 共58页
信息系统2 01-Windows消息机制_第5页
第5页 / 共58页
点击查看更多>>
资源描述

《信息系统2 01-Windows消息机制》由会员分享,可在线阅读,更多相关《信息系统2 01-Windows消息机制(58页珍藏版)》请在金锄头文库上搜索。

1、.,信息系统技术基础-2,授课老师: 王志宏;王长军 实验老师: 王长军,.,Contact Information,Name: 王长军 Office: 721 Tel: 62378372(O); 13816261856(M) Email: cjwang Personal Information 2007-Present 物流系, DHU 2005-2006 Computer System Division, SEC 2002-2005 SJTU,.,课程概要,企业信息化、政府信息化和社会信息化孕育着巨大的软件市场 新技术(IPV6、3G、移动IP、Wibro、蓝牙、RFID)驱动软件市场 新

2、商业模式(E-Commerce、M-Commerce)拉动软件市场,软件是IT的核心与灵魂,.,课程概要,王志宏 操作系统相关 王长军 软件项目开发基础 Windows API编程基础(消息机制;进程/线程;图形接口) 软件项目实施基础,.,Windows消息机制,王长军 2007年7月,.,讲授内容,1. 课程背景 2. Windows程序的特点 3. 事件与消息系统 4. Windows程序的基本结构 5. 实验:利用API 开发Windows程序实例,.,1.1 预备知识,Windows操作系统:用过吧! 一门编程语言:C/VB,学过吧!(C#, Java, Delphi) 一个适合Wi

3、ndows程序设计的编译器和开发环境:Microsoft Visual C+ 6.0/ Visual Basic 6.0,.,1.2 课程目标,不是编程 API (Application Programming Interface)而不是MFC (Microsoft Foundation Class) 消化”消息”,.,1.3 Windows相关,API 就是应用程序编程接口。它是能用来操作组件、应用程序或者操作系统的一组函数。典型的情况下,API 由一个或多个提供某种特殊功能的 DLL 组成 每个 Windows 应用程序都直接或间接地使用了 Windows API 随着 Windows 操

4、作系统的发展,Windows API的内容也在不断扩充之中,.,1.3 Windows相关,MS-DOS,IBM-PC,有限的I/O函数,1981,OS,硬件,MS1.03.0,16bit HW,API函数,1983,图形环境,NTXP,16/32bit HW,API函数,1993,图形环境,Vista,32/64bit HW,API函数,2006,3D图形环境,过程驱动,消息驱动,.,1.3 Windows相关,NTXP,32bit HW,API函数,1993,图形环境,Vista,32/64bit HW,API函数,2006,3D图形环境,MFC (Microsoft Foundation

5、 Class Library ),WPF (Windows Presentation Foundation ) WCF (Windows Communication Foundation) WWF (Windows Workflow Foundation),.,1.3 Windows相关,DOS与Windows驱动机制的区别 DOS是过程驱动 在等待用户输入过程中,所有输入设备(资源)都被“等待”过程抢占了。 Windows是消息(事件)驱动,.,2. Windows程序的特点,2.1图文 2.2消息 2.3整合,.,2.1 图文,1不仅是黑底白字 2. 而是 框架菜单按钮滚动条 称为窗口要素

6、 3. 窗口类型 Console 文字类型 Window 菜单+用户区域 Dialog Message Box 4. 实现途径GDI(图形设备接口,GDI32.dll),.,2.2 消息,不再是循规蹈矩 而是Message based, event driven 窗口程序的主要任务是人机交互 除非人主动结束任务,程序以while循环为主体框架 人不断进行各种输入,计算机不断响应,形成“输入”“响应”的程序结构,.,2.2 消息,各种类型的“输入”,以消息格式存在 GetMessage()取走一个消息 对事件的响应,即事件驱动 DispatchMessage()处理消息 实现途径User32.d

7、ll,.,2.3 整合,MS Windows结构 OS系统服务(KERNEL):内存管理、程序加载(包括DLL)、任务调度、文件管理 用户接口(USER):窗口和消息管理,以及菜单、控制、对话框、定时器等 图形设备接口(GDI, Graphic Device Interface):管理显示器,为USER与应用程序提供与硬件设备独立的接口 对应的,API函数也分为三类: 系统服务;管理和图形设备函数,.,2.3 整合,.DLG,.BMP,.ICO,.CUR,.FON,.RC,.H,.C,.OBJ,.LIB DLL Import,.DEF,RC compiler,Text Editor,Dialo

8、g Editor,Image Editor,Font Editor,C Compiler,LINKER,.EXE,.RES,.,3. 事件与消息系统,3.1事件和事件驱动 3.2消息系统 3.3一个具体的窗口程序,.,3.1 事件和事件驱动,Windows程序为消息而“生”,因消息而“死” 那么,消息从何而来? Windows操作环境中,无论是系统产生的动作或用户运行应用程序产生的动作,称为事件(Events)产生的消息(Message)。 那么,事件又从何而来? 通过输入设备,如键盘和鼠标 通过屏幕上可视的对象,如菜单、工具栏按钮、滚动条和对话框上的控件 来自Windows内部,.,基于事件

9、驱动的程序模型,3.1 事件和事件驱动,.,Windows消息系统的组成 消息队列 消息循环 窗口过程,3.2 消息系统,.,消息的数据结构 消息的数据结构MSG的定义如下: typedef struct tagMSG HWND hwnd; /用以检索消息的窗口句柄 UINT message;/消息值 WPARAM wParam;/包含有关消息的附加信息 LPARAM lParam; /随不同的消息而有所不同 DWORD time;/消息送到队列的时间 POINT pt; /消息发送时,屏幕光标的位置 MSG;,3.2 消息系统,.,Windows常用消息 WM_LBUTTONDOWN:单击鼠

10、标左键时产生的消息; WM_LBUTTONUP:放开鼠标左键时产生的消息; WM_RBUTTONDOWN:单击鼠标右键时产生的消息; WM_RBUTTONUP:放开鼠标右键时产生的消息; WM_LBUTTONDBLCLK:双击鼠标左键时产生的消息; WM_RBUTTONDBLCLK:双击鼠标右键时产生的消息; WM_CREATE:CreateWindows()函数产生的消息; WM_CLOSE:关闭窗口时产生的消息; WM_QUIT:退出应用程序时由PostQuitMessage()发出的消息; WM_PAINT:Windows系统需要重绘时产生的消息。 ,3.2 消息系统,.,3.2 消息系

11、统,消息队列 消息队列是系统定义的内存块,用于临时存储消息;或是把消息直接发给窗口过程 在16位的系统中系统中只有一个消息队列 32位的系统中每一运行的程序都会有一个消息队列,.,支持队列特征的消息驱动模型,3.2 消息系统,消息队列,.,3.2 消息系统,什么是消息循环 while(GetMessage( ,.,3.2 消息系统,Windows消息处理示意图,Windows系统,应用 程序 队列A,应用 程序 队列B,系统队列,WinMain函数 消息循环,窗口 函数1,窗口 函数2,WinMain函数 消息循环,窗口 函数1,窗口 函数2,应用程序A,应用程序B,消息循环,.,WinMai

12、n() 初始化; while(GetMessage( ,系统 消息 队列,WndProc(msg) ,switch(msg) case MSG1: case MSG2: ,应用 程序 消息 队列,mouse driver,keyboard driver,SendMessage(),USER Module,message from Other window,PostMessage(),system,3.3 一个具体的窗口程序,.,4. Win32程序的基本结构,4.1. Windows程序组成 4.2. 详解入口,窗口,消息 4.3. Windows数据类型 4.4. Windows程序的“生生

13、死死”,.,WinMain()程序入口点 注册窗口 RegisterClass() 生成并显示窗口 CreateWindow() ShowWindow() 消息循环 WndProc()窗口函数(功能实现) 区分消息 switch 根据消息触发相应处理 调用DefWindowProc() 不处理的消息、和需要系统进一步处理的消息 如WM_CLOSE,使用者关闭了窗口。应用程序获得这个消息后,释放了自己的资源,然后让系统进一步执行关闭窗口的动作,4.1. Windows程序组成,.,WinMain() 初始化; 创建、显示、更新窗口; 建立基于消息的 事件驱动机制 ,WinMain() Regis

14、terClass( ); CreateWindow( ); ShowWindow( ); UpdateWindow( ); while(GetMessage( ,WinMain()程序入口点,4.2. 详解入口,.,4.2. 详解入口,WinMain函数的原型如下: int WINAPI WinMain ( HINSTANCE hInstance, / 当前实例句柄 HINSTANCE hPrevInstance, / 以前的实例句柄 LPSTR lpCmdLine, / 指向命令行参数的指针 int nCmdShow ) / 窗口的显示状态,.,初始化包括 定义窗口 注册窗口 创建窗口 显示

15、窗口 需要注意的是,在显示窗口ShowWindow函数后,需调用UpdateWindow()函数更新并绘制用户区,并发出WM_PAINT消息。,4.2. 详解窗口,.,注册窗口RegisterClass( ) 在注册之前可以设置窗口属性,系统会给出一些缺省值,我们重点关心其中的lpfnWndProc参数,WNDCLASS wc; wc.stvle = ; wc.lpfnWndProc (WNDPROC)WndProc;,提示系统收到消息后,调该函数处理消息,wc.hIcon = ,wc.Cursor = ,wc.hbrBackground = ,RegisterClass(,4.2. 详解窗口,.,CreateWindow() ShowWindow() UpdateWindow(),4.2. 详解窗口,HWND CreateWindow( LPCTSTR lpClassName, / 已注册的窗口类名 LPCTSTR lpWindowName, / 窗口标题 DWORD dwStyle, / 窗口风格 int x, / 窗口的水平位置 int y, / 窗口的垂直位置 int nWidth, / 窗口宽度 int nHeight, / 窗口

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号