南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)08 消息(事件)驱动的程序设计

消息(事件)驱动的程序设计
消息(事件)驱动的程序设计

主要内容 Vindows简介 ■消息驱动的程序结构 基于Vindows API的过程式Windows应 用程序设计 基于MFC和“文档一视”结构的面向对象 Windows应用程序设计
主要内容 ◼ Windows简介 ◼ 消息驱动的程序结构 ◼ 基于Windows API的过程式Windows应 用程序设计 ◼ 基于MFC和“文档-视”结构的面向对象 Windows应用程序设计

WVindows简介 Vindows是一种基于图形界面的多任务操作系 统。 ·系统中可以同时运行多个应用程序。 每个应用程序通过各自的“窗口”与用户进行交互。 用户通过鼠标的单击/双击/拖放、菜单选择以及键 盘输入来进行操作。 Windows的功能以两种方式提供: 工具(应用程序):资源管理器、记事本、画图 供用户使用。 函数库:作为Windows的应用程序接口(API) 以C语言函数形式提供(在windows.h等头文件中 申明)八,提供给应用程序使用
Windows简介 ◼ Windows是一种基于图形界面的多任务操作系 统。 • 系统中可以同时运行多个应用程序。 • 每个应用程序通过各自的“窗口”与用户进行交互。 • 用户通过鼠标的单击/双击/拖放、菜单选择以及键 盘输入来进行操作。 ◼ Windows的功能以两种方式提供: • 工具(应用程序):资源管理器、记事本、画图、 ......,供用户使用。 • 函数库:作为Windows的应用程序接口(API), 以C语言函数形式提供(在windows.h等头文件中 申明),提供给应用程序使用

Windows应用程序的类型 ■ 单文档应用 ·只能对一个文档的数据进行操作 ·必须首先结束当前文档的所有操作之后,才能进行下一个文 档的操作。 多文档应用 同时可以对多个文档的数据进行操作。 不必等到一个文档的所有操作结束,就可以对其它文档进行 操作,对不同文档的操作是在不同的子窗口中进行的。 对话框应用 以对话框的形式操作一个文档数据。 对文档数据的操作以各种“控件”(control)来实现。 程序以按或等按钮来结束
Windows应用程序的类型 ◼ 单文档应用 • 只能对一个文档的数据进行操作。 • 必须首先结束当前文档的所有操作之后,才能进行下一个文 档的操作。 ◼ 多文档应用 • 同时可以对多个文档的数据进行操作。 • 不必等到一个文档的所有操作结束,就可以对其它文档进行 操作,对不同文档的操作是在不同的子窗口中进行的。 ◼ 对话框应用 • 以对话框的形式操作一个文档数据。 • 对文档数据的操作以各种“控件”(control)来实现。 • 程序以按或等按钮来结束

消息驱动的程序结构 Vindows应用程序的结构属于消息(事件)驱动的 结构: 。程序的任何一个动作都是在接收到一条消息后发生的。 Windows的消息有: VM KEYDOWN/WM KEYUP(键盘按键 NM CHAR(字符) WM LBUTTONDOWN/WM LBUTTONUP/WM LBUT TONDBLCLK/NM MOUSEMOVE(鼠标按键 WM_COMMAND(菜单) NM PAINT(窗口内容刷新 WM TIMER(定时器消息)
消息驱动的程序结构 ◼ Windows应用程序的结构属于消息(事件)驱动的 结构: • 程序的任何一个动作都是在接收到一条消息后发生的。 ◼ Windows的消息有: • WM_KEYDOWN/WM_KEYUP(键盘按键) • WM_CHAR(字符) • WM_LBUTTONDOWN/WM_LBUTTONUP/WM_LBUT TONDBLCLK/WM_MOUSEMOVE (鼠标按键) • WM_COMMAND(菜单) • WM_PAINT(窗口内容刷新) • WM_TIMER(定时器消息) •

每个Windows应用程序都有一个消息队列: ·Windows系统会把属于各个应用程序的消息放入 各自的消息队列。 大部分的消息都关联到某个窗口。 ·每个窗口都有一个消息处理函数。 Vindows应用程序不断地从自己的消息队列 中获取消息并调用相应窗口的消息处理函数 来处理获得的消息。 这个“取消息-处理消息”的过程构成了消息循环。 当取到某个特定消息(NM QUIT)后,消息循 环结束
◼ 每个Windows应用程序都有一个消息队列。 • Windows系统会把属于各个应用程序的消息放入 各自的消息队列。 ◼ 大部分的消息都关联到某个窗口。 • 每个窗口都有一个消息处理函数。 ◼ Windows应用程序不断地从自己的消息队列 中获取消息并调用相应窗口的消息处理函数 来处理获得的消息。 • 这个“取消息-处理消息”的过程构成了消息循环。 • 当取到某个特定消息(WM_QUIT)后,消息循 环结束

消息队列: 消息 (Windows) 主程序: /初始化 /进入消息循环 while(取消息) 消息处理函数: 处理消息 注意:每个消息的处理时间不宜太长, 否则会造成程序“假死”现象 (程序不响应其它消息)
主程序: //初始化 ...... //进入消息循环 while (取消息) { ...... 处理消息 } 消息队列: 消息处理函数: ...... 注意:每个消息的处理时间不宜太长, 否则会造成程序“假死”现象 (程序不响应其它消息)。 消息 (Windows)

基于Vindows API的过程式 Vindows应用程序设计 每个Vindows应用程序都必须提供一个主函数 WinMain,其主要功能是: 注册窗口类(窗口的基本信息) 窗口类信息包括:窗口类的名字、窗口的基本风格、消息处理函 数名、图标、光标、背景颜色以及菜单等。 每类窗口(不是每个窗口)都需要注册。 创建应用程序的主窗口其它窗口等到需要时再创建) 进入消息循环,直到接收到WM_QUT消息时,消息循环 结束。 程序还要为每类窗口提供一个消息处理函数,用于处 理发送到它的消息
◼ 每个Windows应用程序都必须提供一个主函数 WinMain,其主要功能是: • 注册窗口类(窗口的基本信息): ◼ 窗口类信息包括:窗口类的名字、窗口的基本风格、消息处理函 数名、图标、光标、背景颜色以及菜单等。 ◼ 每类窗口(不是每个窗口)都需要注册。 • 创建应用程序的主窗口(其它窗口等到需要时再创建)。 • 进入消息循环,直到接收到WM_QUIT消息时,消息循环 结束。 ◼ 程序还要为每类窗口提供一个消息处理函数,用于处 理发送到它的消息。 基于Windows API的过程式 Windows应用程序设计

消息队列: WinMain(...) 消息 {/注册窗口类 (Windows) 。11 /创建主窗口 ”01g /进入消息循环 消息处理函数: while (GetMessage(...)) WindowProc(...,message,...) switch(message) case...: DispatchMessage(...); case...: 011.10
WinMain(...) { //注册窗口类 ...... //创建主窗口 ...... //进入消息循环 while (GetMessage(...)) { ...... DispatchMessage(...); } } 消息队列: 消息处理函数: WindowProc(...,message,...) { switch(message) { case ...: case ...: ...... } } 消息 (Windows)

/Windows应用程序的主函数 #include/Vindows,所提供的API声明文件。 int APIENTRY WinMain(HINSTANCE hInstance,/本实例标识(Handle HINSTANCE hPrevInstance,/上一个实例标识 LPSTR IpCmdLine,/命令行参数 int nCmdShow)/主窗口显示方式 {/注册窗口类(下面是个示意,函数参数实际为一个结构WNDCLASS) RegisterClass(...,WindowProc,"my_window_class");// /创建并显示主窗口 HWND hWnd; hWnd=CreateWindow("my_window_class",...,x,y,width,height,...); ShowWindow(hWnd,nCmdShow); /消息循环,直到接收到WM QUIT消息 while(GetMessage(&msg,NULL,O,O)/从消息队列中取消息。 { DispatchMessage(&msg);/把消息发送到程序相应的窗口。 return msg.wParam;
//Windows应用程序的主函数 #include //Windows所提供的API声明文件。 int APIENTRY WinMain(HINSTANCE hInstance, //本实例标识(Handle) HINSTANCE hPrevInstance, //上一个实例标识 LPSTR lpCmdLine, //命令行参数 int nCmdShow ) //主窗口显示方式 { //注册窗口类(下面是个示意,函数参数实际为一个结构WNDCLASS) RegisterClass(..., WindowProc, "my_window_class"); //示意 ...... //创建并显示主窗口 HWND hWnd; hWnd=CreateWindow("my_window_class",…,x,y,width,height,...); ShowWindow(hWnd, nCmdShow); ...... //消息循环,直到接收到WM_QUIT消息 while (GetMessage(&msg, NULL, 0, 0)) //从消息队列中取消息。 { ...... DispatchMessage(&msg); //把消息发送到程序相应的窗口。 } return msg.wParam; }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)07 异常处理.ppt
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)05 泛型(类属)程序设计-模板.ppt
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)04 继承-派生类.ppt
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)03-1 λ表达式.ppt
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)03 操作符重载.ppt
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)02 数据抽象与封装——对象与类.ppt
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)10 f函数式、逻辑式程序设计 unctional & logic programming.ppt
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)08 复合数据的描述——构造数据类型(指针及其应用).pptx
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)07 过程(功能)抽象——函数(标识符作用域与变量生存期).pptx
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)06 复合数据的描述——构造数据类型(基础).pptx
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)05 过程(功能)抽象——函数(基础).pptx
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)04 简单数据的描述——基本数据类型与表达式(深入).pptx
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)03 程序的流程控制——语句.pptx
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)02 简单数据的描述——基本数据类型与表达式(基础).pptx
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,基础篇)01 概述.pptx
- 宣城工业学校:《计算机应用基础(Windows7+Office2010)》课程教学资源(课件讲稿)第1章 计算机基础知识 1.5 数制与编码.pdf
- 软件工程:面向对象程序设计模型中的并发行为(博士论文).pdf
- 南京大学:《自然语言处理 Natural Language Processing(NLP)》课程教学资源(PPT课件讲稿)自然语言处理概述、基于规则的自然语言处理方法(理性方法,传统方法)、机器翻译.ppt
- 中国地质大学(武汉):《计算机维护维修 Computer Load & Repair》课程教学资源(课件讲稿)第十章 辅助系统故障维修.pdf
- 中国地质大学(武汉):《计算机维护维修 Computer Load & Repair》课程教学资源(课件讲稿)第五章 主板系统故障维修.pdf
- 南京大学计算机科学与技术系:《程序设计(C++)》课程教学资源(PPT讲稿,高级篇)09 转移构造函数 & 转移赋值操作符重载函数.ppt
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(教学大纲,葛广英).pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第1章 Matlab软件入门(葛广英).pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第2章 MATLAB的程序设计(2.1-2.2).pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第2章 程序设计和M文件(2.3-2.5).pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第2章 程序设计和M文件 2.4 M文件.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第3章 MATLAB图形图像处理(1/2).pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第3章 MATLAB图形图像处理(2/2).pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第4章 SIMULINK仿真.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,上)第6章 Matlab在信号处理中的应用.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,下)第1章 系统环境.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,下)第2章 MATLAB应用基础.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,下)第3章 MATLAB绘图(图形图像处理).pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,下)第4章 Matlab数值计算与符号计算.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,下)第5章 SIMULINK仿真工具箱.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,下)第7章 信号处理工具箱.pdf
- 聊城大学:《MATLAB语言及应用 MATLAB Language and Application》课程教学资源(课件讲稿,下)第9章 SIMPowerSystem工具箱.pdf
- 南京大学:《程序设计(C++)》课程教学资源(PPT课件讲稿,基础篇)01 概述(陈家骏).pptx
- 南京大学:《程序设计(C++)》课程教学资源(PPT课件讲稿,基础篇)02 简单数据的描述——基本数据类型与表达式(基础).pptx
- 南京大学:《程序设计(C++)》课程教学资源(PPT课件讲稿,基础篇)03 程序的流程控制——语句.pptx