c++windows编程基础andMFC.ppt

上传人:qwe****56 文档编号:70012763 上传时间:2023-01-14 格式:PPT 页数:71 大小:1.30MB
返回 下载 相关 举报
c++windows编程基础andMFC.ppt_第1页
第1页 / 共71页
c++windows编程基础andMFC.ppt_第2页
第2页 / 共71页
点击查看更多>>
资源描述

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

1、 前一页 休息 前一页 休息 前一页 休息1第三章 Windows编程编程 MFC编程编程VC+语言程序设计 前一页 休息2编写编写Windows应用程序必须首先了解以下内容:应用程序必须首先了解以下内容:(1)窗口的概念窗口的概念 (2)事件驱动的概念事件驱动的概念(3)消息消息 (4)句柄句柄 对象是对象是Windows的规范部件的规范部件窗口窗口菜单菜单按钮按钮对话框对话框程序模块程序模块编写编写Windows程序相当一部分工程序相当一部分工作是在创建对象和作是在创建对象和为对象属性赋值为对象属性赋值对象特征:具有规范形态和操作模式对象特征:具有规范形态和操作模式编程方法编程方法传统编写

2、法传统编写法-API交互式方法交互式方法-MFC3.1 Windows编程的概念一个应用程序的窗口一般包含下列组成部分:一个应用程序的窗口一般包含下列组成部分:窗口边界窗口边界工作区工作区控制菜单框控制菜单框下拉菜单下拉菜单水平滚动条水平滚动条垂直滚动条垂直滚动条最大化按钮最大化按钮最小化按钮最小化按钮标题栏标题栏1.窗口窗口 前一页 休息4n窗口是由应用程序创建的一个用于接收用户输接收用户输入和显示输出的矩形区域入和显示输出的矩形区域。是系统管理应用程序的基本单位。n窗口由“非客户区”和“客户区”组成。n非客户区由系统绘制,包括菜单、工具栏、最大化按钮等。客户区由应用程序绘制,用于输出数据和

3、接受用户的输入。n编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换数据处理与数据交换的过程。1.窗口窗口 前一页 休息5Windows程序设计是针对事件或程序设计是针对事件或消息消息的处理进行的处理进行。消息是描述事件发消息是描述事件发生的信息生的信息如按下鼠标或键盘如按下鼠标或键盘Windows对消息有一套严格的定义对消息有一套严格的定义,并在其产生时并在其产生时将其发送给所有相关的应用程序将其发送给所有相关的应用程序,这些消息用于驱动这些消息用于驱动应用程序运行以实现一定的功能。应用程序运行以实

4、现一定的功能。Windows程序的执行顺序取决于程序的执行顺序取决于事件发生的顺序事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。消息的产生往往并不要求有次序之分。2.事件驱动事件驱动 前一页 休息6消息驱动机制派送消息消息源1消息源2消息源n否程序开始程序结束捕获消息是否退出消息是处理消息 前一页 休息73 消息n消息的含义n消息来源n消息队列n消息的结构消息是关于所发生的事件的通知.事件是一个动作,如按下鼠标、选择菜单输入消息、控制消息、系统消息、用户消息USER用户交互内核 来管理 前一页 休息8

5、Windows应用程序的结构是基于消息驱动模型基于消息驱动模型,程序的,程序的任何一个动作都是在接收到一条消息后发生的任何一个动作都是在接收到一条消息后发生的,如:WM_KEYDOWN WM_KEYUP WM_CHAR WM_LBUTTONDOWN WM_LBUTTONUP WM_PAINT WM_COMMAND等,每条消息都可以带有参数(wParam,lParam)。大部分的消息都关联到某个窗口,每个窗口都有一个消息处理过程(函数),属于某个窗口的消息都将由相应的消息处理过程来进行处理。每个Windows应用程序都有一个消息队列,Windows系统会把属于各个应用程序的消息放入各自的消息队列

6、,应用程序不断地从自己的消息队列中获取消息并把它们发送到相应的窗口处理过程。这个循环(取消息-处理消息)一直到用户以某种方式(如:关闭应用程序的主窗口)结束程序而终止。下面给出了Windows应用程序的一个框架:消息的含义消息的含义消息队列消息队列 应用程序1窗口函数WndProc消息映射默认窗口函数DefWndowProcApp1消息队列 App2消息队列 App3消息队列 系统队列输入消息系统消息postMessageSendMessageUSER用户交互内核 前一页 休息10消息的结构定义:消息的结构定义:typedef struct tagMSG typedef struct tagM

7、SG HWND hwnd;接收消息的接收消息的窗口句柄,为窗口句柄,为null,则可检索所有驻留在消息队列中的消息,则可检索所有驻留在消息队列中的消息 UINT message;UINT message;消息值,由消息值,由Windows.h头文件中的宏定义来标识头文件中的宏定义来标识 WPARAM wParam;32WPARAM wParam;32位位消息的附加信息消息的附加信息wParam和和lParam,不同消息其值有所不同不同消息其值有所不同 LPARAM lParam;LPARAM lParam;DWORD time;DWORD time;指定消息送至队列的时间指定消息送至队列的时间

8、 POINT pt;POINT pt;指定消息发送时屏幕光标的位置,指定消息发送时屏幕光标的位置,其数据类型其数据类型POINT是一个结构体是一个结构体MSG;MSG;消息号消息号:由事先定义好的消息名标识由事先定义好的消息名标识字参数字参数(wParam),长字参数长字参数(lParam):用用 于提供消息的于提供消息的附加信息附加信息消消息息附加信息附加信息与具体消息号的值有关,与具体消息号的值有关,对于控件,含义见对于控件,含义见P167P167typedef struct typedef struct tagPOINT tagPOINT LONG xLONG x;LONG y;LONG

9、 y;POINT;POINT;消息的结构消息的结构消息的结构消息的结构 前一页 休息11常用句柄类型及其说明常用句柄类型及其说明句柄是一个句柄是一个4字节长的数值,用于标识字节长的数值,用于标识应用程序中不同的应用程序中不同的对象对象和和同类对象中不同类对象中不同的实例同的实例窗口窗口按钮按钮图标图标滚动条滚动条输出设备输出设备控制控制文件文件应用程序通过应用程序通过句柄访问相应句柄访问相应的对象信息的对象信息HWNDHWND窗口句柄窗口句柄HDCHDC 设备环境句柄设备环境句柄HBITMAPHBITMAP 位图句柄位图句柄HCURSOR HCURSOR 光标句柄光标句柄HICONHICON图

10、标句柄图标句柄HFONTHFONT 字体句柄字体句柄HMENUHMENU菜单句柄菜单句柄HPENHPEN 画笔句柄画笔句柄HFILEHFILE文件句柄文件句柄HBRUSHHBRUSH 画刷句柄画刷句柄HINSTANCEHINSTANCE当前实例句柄当前实例句柄4.句柄句柄 前一页 休息12一个完整的一个完整的Windows应用程序应用程序通常由通常由五种类型五种类型的的文件组成。文件组成。1.C1.C语言源程序文件语言源程序文件2.2.头文件头文件3.3.模块定义文件模块定义文件4.4.资源描述文件资源描述文件5.5.项目文件项目文件 1.1.应用程序的组成应用程序的组成应用程序的组成应用程序

11、的组成3.2 Windows应用程序的基本结构应用程序的基本结构一个一个一个一个windowswindows应用程序常具有以下特性:应用程序常具有以下特性:应用程序常具有以下特性:应用程序常具有以下特性:(1 1)消息驱动机制)消息驱动机制)消息驱动机制)消息驱动机制 (2 2)图形设备界面()图形设备界面()图形设备界面()图形设备界面(GDIGDI)(3 3)基于资源的程序设计)基于资源的程序设计)基于资源的程序设计)基于资源的程序设计 (4 4)动态链接库动态链接库动态链接库动态链接库 前一页 休息13入口函数入口函数WinMain窗口函数窗口函数WndProcWndProcWindow

12、s应用程序应用程序构成基构成基本框架本框架包含各种包含各种数据类型、数据类型、数据结构数据结构与函数等与函数等2.2.源程序组成结构(源程序组成结构(源程序组成结构(源程序组成结构(API API )前一页 休息14(1)WinMain函数函数三个基本的组成部分:三个基本的组成部分:函数说明函数说明、初始化初始化和和消息循环消息循环详见详见P127129功功能能注册窗口类,建立窗口及执行必要的初始化注册窗口类,建立窗口及执行必要的初始化进入消息循环,根据接受的消息调用相应的处理过程进入消息循环,根据接受的消息调用相应的处理过程当消息循环检索到当消息循环检索到WM_QUIT时终止程序运行时终止程

13、序运行WinMain()函数,相当于()函数,相当于main()前一页 休息15例例Ex_HelloMsg 一个简单的一个简单的Windows应用程序应用程序#include int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)MessageBox(NULL,你好,我的Visual C+世界!,问候,0);return 0;前一页 休息16 WndProc函数由一个或多个函数由一个或多个switch语句组成。每语句组成。每一条一条case语句对应一种消息,当应用程

14、序接收到一个语句对应一种消息,当应用程序接收到一个消息时,相应的消息时,相应的case语句被激活并执行相应的响应程语句被激活并执行相应的响应程序模块。序模块。例见例见P129代码代码WndProc包含了对各种可能接收到的消息的处理过程包含了对各种可能接收到的消息的处理过程定义定义了应用程序对接收到的不同消息的响应了应用程序对接收到的不同消息的响应(2 2)窗口函数窗口函数窗口函数窗口函数WndProcWndProc和消息处理和消息处理和消息处理和消息处理 前一页 休息17例例Ex_HelloWin 一个完整的一个完整的Windows应用程序应用程序#include LRESULT CALLBA

15、CK WndProc(HWND,UINT,WPARAM,LPARAM);/窗口过程int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)HWND hwnd;/窗口句柄 MSG msg;/消息 WNDCLASSwndclass;/窗口类 前一页 休息18 wndclass.style=CS_HREDRAW|CS_VREDRAW;wndclass.lpfnWndProc =WndProc;wndclass.cbClsExtra =0;wndclass.cbWndExtr

16、a =0;wndclass.hInstance =hInstance;wndclass.hIcon =LoadIcon(NULL,IDI_APPLICATION);wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);wndclass.lpszMenuName =NULL;wndclass.lpszClassName=HelloWin;/窗口类名 前一页 休息19nif(!RegisterClass(&wndclass)/注册窗口 Messag

17、eBox(NULL,窗口注册失败!,HelloWin,0);return 0;前一页 休息20hwnd=CreateWindow(HelloWin,“我的窗口”,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,NULL,NULL,hInstance,NULL);前一页 休息21ShowWindow(hwnd,nCmdShow)UpdateWindow(hwnd);while(GetMessage(&msg,NULL,0,0)TranslateMessage(&msg);DispatchMes

18、sage(&msg);return msg.wParam;前一页 休息22LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam)switch(message)case WM_CREATE:/窗口创建产生的消息return 0;case WM_LBUTTONDOWN:MessageBox(NULL,你好,我的Visual C+世界!,问候,0);return 0;case WM_DESTROY:/当窗口关闭时产生的消息 PostQuitMessage(0);return 0;return DefWi

19、ndowProc(hwnd,message,wParam,lParam);前一页 休息23例例Ex_HelloWin 一个完整的一个完整的Windows应用程序应用程序程序运行后,单击鼠标左键,就会弹出一个对话框,结果如图3.2所示。图3.2 Ex_HelloWin运行结果 前一页 休息24开始执行初始化应用初始化和创建应用窗口进入消息循环并从消息队列得到一个消息当前消息是否WM_QUIY?终止执行程序是否定义了对此消息的处理进行默认处理处理消息NNYY3.Windows3.Windows应用程序的执行过程应用程序的执行过程应用程序的执行过程应用程序的执行过程 前一页 休息25 在在Windo

20、ws.hWindows.h中中定义了定义了WindowsWindows 应用程序中包含种应用程序中包含种类繁多的数据类型类繁多的数据类型4 4数据类型数据类型数据类型数据类型 前一页 休息26MSG:包含一个消息的全部信息,是消息发送的格式:包含一个消息的全部信息,是消息发送的格式WNDCLASS:包含一个窗口类的全部信息及属性:包含一个窗口类的全部信息及属性POINT:定义了屏幕上或窗口中的一个点的:定义了屏幕上或窗口中的一个点的X和和 Y坐标坐标RECT:定义了一个矩形区域及其左上角和右下角的坐标:定义了一个矩形区域及其左上角和右下角的坐标几几种种重重要要的的结结构构5.5.一些重要的数据

21、结构一些重要的数据结构一些重要的数据结构一些重要的数据结构 前一页 休息27APIAPI函数函数的功能的功能为应用程序提供为应用程序提供Windows系统特殊系统特殊函数及数据结构函数及数据结构Win应用程序可应用程序可以利用大量标准以利用大量标准API函数调用系函数调用系统功能统功能是是Win系统与系统与Win应用程序间应用程序间的标准程序接口的标准程序接口窗口管理函数窗口管理函数实现窗口的创实现窗口的创建、移动和修建、移动和修改功能改功能系统服务函数:系统服务函数:实现与操作系统实现与操作系统有关的多种功能有关的多种功能图形设备图形设备(GDI)函函数:实现与设备数:实现与设备无关的图形操

22、作无关的图形操作功能功能附:附:附:附:APIAPI函数概念函数概念函数概念函数概念 (补充)(补充)(补充)(补充)作业 P131 4-1、4-2、4-3 前一页 休息283.3 MFC简介n类库是一个可以在应用程序中使用的相互关联的类的集合。nMFC库Microsoft 基本类库是一个Windows应用程序框架,它把传统的Windows编程规范中的大多数内容封装成为各种类,它定义了应用程序的结构,并实现了标准的用户接口,提高了编程效率q可以管理窗口、菜单、对话框,实现基本的输入/输出和数据存储。MFC库简介 前一页 休息295.2 MFC类的层次结构和常用类nMFC分类分类q CObjec

23、t_derived 类q Non_CObject_derived 类CObjectCCmdTargetCWinThreadCWinAppCWndCFrameWndCViewCDocument根类命令相关类应用程序类窗口类文档类视图类框架窗口类线程基类 前一页 休息30非非CObject派生类派生类n通用工具类qCString qCTime qCRectqCpointqCSizenMFC支持类 qCArchiveqCDumpContextqCRuntimeClassqCFileStatusqCMemoryStatenCTypePointerArray 其他详见 P134138 前一页 休息313

24、.4 MFC应用程序框架结构MFC库简介MFC的的应用程序框架应用程序框架优点:优点:MFC按照按照C+类的层次形式组织在一起类的层次形式组织在一起,类封装了类封装了Windows API函数并提供函数并提供Windows应用程序常见应用程序常见任务的缺省处理代码。几个基类提供一般功能,由任务的缺省处理代码。几个基类提供一般功能,由基类派生的类实现更具体的行为。基类派生的类实现更具体的行为。MFC提供了提供了文档和视图文档和视图模型以实现数据和显示的分模型以实现数据和显示的分离。文档类(离。文档类(Document)用来维护、管理数据,)用来维护、管理数据,包括数据的读取、存储与修改;视图类(

25、包括数据的读取、存储与修改;视图类(View)用)用来接收并显示数据,将这些数据交给文档类来处理。来接收并显示数据,将这些数据交给文档类来处理。MFC库提供了自动消息处理功能。库提供了自动消息处理功能。MFC的框架结构的框架结构通过通过消息映射消息映射机制,将机制,将Windows消息直接映射到消息直接映射到个成员函数进行处理个成员函数进行处理,简化了消息的处理方式。简化了消息的处理方式。前一页 休息32 n应用程序框架包含用于生成应用程序所必需的应用程序框架包含用于生成应用程序所必需的各种面向对象的组件的集合各种面向对象的组件的集合.nVC+6.0中中,MFC APPWizard能方便地生成

26、应能方便地生成应用程序框架用程序框架,然后在此基础上进行进一步的编然后在此基础上进行进一步的编辑工作辑工作.nMFC生成的应用程序包括如下一些要素生成的应用程序包括如下一些要素:前一页 休息33nWinMain()函数函数,隐藏在应用程序框架隐藏在应用程序框架中;中;n应用程序类应用程序类(如如CMyHelloApp),该类的每个对象代该类的每个对象代表一个应用程序表一个应用程序,程序中默认定义一个全局程序中默认定义一个全局CMyHelloApp对象即对象即theApp;n应用程序启动应用程序启动WinMain()寻找由寻找由CWinApp派生出的派生出的全局构造的应用程序对象;全局构造的应用

27、程序对象;n成员函数成员函数:CMyHelloApp:InitInstance(),调用所需调用所需的构造并显示应用程序的主框架窗口;的构造并显示应用程序的主框架窗口;n成员函数成员函数:CWinApp:Run(),隐藏在基类中隐藏在基类中,发送应发送应用程序的消息到窗口用程序的消息到窗口,保持应用程序的正常运行;保持应用程序的正常运行;MFC库简介 前一页 休息34nCMainFrame类类,其对象代表应用程序的主框架其对象代表应用程序的主框架窗口;窗口;nCDocument/CView类,应用程序框架的核心。类,应用程序框架的核心。MFC通过通过文档一视图文档一视图结构为应用程序提供一种结

28、构为应用程序提供一种将数据与视图相分离的存储方式。将数据与视图相分离的存储方式。q文档类的作用是将应程序的数据保存在文档类文档类的作用是将应程序的数据保存在文档类对象中,以及从磁盘文件中读或向磁盘文件中对象中,以及从磁盘文件中读或向磁盘文件中写数据。写数据。q视图类的作用是显示数据和编辑数据。视图类的作用是显示数据和编辑数据。n关闭应用程序关闭应用程序MFC库简介 前一页 休息35应用程序的运行机制应用程序的运行机制nMFC应用程序有自己特殊的运行机制,下面以应用程序有自己特殊的运行机制,下面以WinHello程序为例,列出应用程序的执行过程。程序为例,列出应用程序的执行过程。程序开始初始化全

29、局对象theAppCWinApp类构造函数CHelloApp类构造函数AfxWinMain函数pApp-InitInstance()调 用 ProcessShellCommand()创建主框架窗口对象、视图对象、文档对象,创建主框架窗口和视图窗口并显示CWinThread:Run()WM_QUIT消息循 环结束pApp-Run()CHelloApp theAppCWinApp *pApp=AfxGetApp();WinMainpApp-InitApplication();前一页 休息363.5 利用AppWizard生成MFC应用程序 n创建工程创建工程:用VisualC+的MFC AppWI

30、zard创建应用程序的基本框架n可视化设计可视化设计:用VC+自带的工具软件Wizards,制作Windows风格的图形用户界面和各种控件。n编写程序代码编写程序代码:用MFCClassWizard添加消息相应函数,然后编写函数代码。前一页 休息37MyHello应用程序n创建工程 “File/New/Project/MFC AppWizard(exe)”Project name:”MyHello”;Location:”d:MyVC”根据向导选择:Single document中文中国None其它接受默认设置,最后单击“Finish”,显示“New Project Information”窗口

31、。前一页 休息38MyHello应用程序 n编写程序代码编写程序代码“Workspace/FileView/MyHelloView.cpp”找到函数OnDraw(CDC*pDC),在其中添加显示字符串:pDC-TextOut(100,80,”Hello,我们开始VC+编程了!”);前一页 休息39MyHello应用程序 n编译运行编译运行 编译:“Build/Build MyHello.exe”运行:“Build/Execute MyHello.exe”n 关闭:关闭运行窗口 前一页 休息40MyHello应用程序分析 打开“Workspace”窗口中的”Class View(类视图),MFC

32、生成5个类CAboutDlgCMainFrameCMyHelloAppCMyHelloDocCMyHelloView 对于每个类MFC生成两个文件:.h:定义了类和它的各种变量、函数原形;.cpp:生成类对象、实现这个类的函数体。前一页 休息41MyHello应用程序分析 CMyHelloApp类:类:派生于MFC的CWinApp类,作用是初始化应用程序及运行该程序的所需的成员函数。MyHello.h:声明了CMyHelloApp类,虚函数InitInstance()的作用:设置注册数据库,载入标准设置(最近打开的文件列表等)、注册文档模板,其中在注册文档模板时隐含创建了主窗口接下来处理命令行

33、参数,显示窗口,然后返回、进入消息循环。前一页 休息42MyHello应用程序分析 CMainFrame类:类:派生于MFC的CFrameWnd类,作用是管理应用程序的窗口,显示标题栏、状态栏、工具栏等,同时处理针对窗口操作的信息。MainFrm.h:声明了两个主要函数PreCreateWindow()和OnCreate()及两个对象m_wndStatusBar(管理状态栏)和m_wndToolBar(管理工具栏)前一页 休息43MyHello应用程序分析 CMyHelloDoc类类:派生于MFC的CDocument类,作用是存放应用程序的数据以及文件的保存加载功能。文档类要通过视图类来实现与

34、用户的交互。CMyHelloDoc.h:声明了三个主要函数OnNewDocument()用于初始化文档 Serialize()串行化(保存和装入)文档 Dump()用于调试诊断。前一页 休息44MyHello应用程序分析 CMyHelloView类:类:派生于MFC的CView类,作用是管理视图窗口,它对应的对象在框架窗口中实现用户数据的显示和打印。MyHelloView.h:声明了三个函数用于实现数据打印OnPreparePrinting()/OnBeginPrinting()/OnEndPrinting()。GetDocument():返回CMyHelloDoc指针,获取文档指针 OnDr

35、aw():实现视图数据的显示和刷新。前一页 休息45MyHello应用程序分析 预编译头文件预编译头文件stdafx.h:用于建立一个预编译的头文件MyHello.pch和一个预定义的类型文件stdafx.obj,加速编译过程。资源文件:Resource.h MyHello.ioc:应用程序的图标 MyHello.rc2:不可直接编辑的资源 Toolbar.bmp:工具栏用到的位图资源 MyHelloDov.ico:生成文档的图标 ReadMe.txt 前一页 休息463.6 MFC消息处理nMFC应用程序与其他任何 Windows 程序一样,也使用消息驱动机制,但 MFC 提供的消息处理机制

36、使得消息的处理更加容易。nMFC中消息可以分为三类:qWindows 消息(窗口消息):包括以 WM_开头的消息,但 WM_COMMAND 除外。Windows消息由窗口和视图处理。这种消息通常附带一些参数传递给处理函数,这些参数为处理函数正确地处理消息提供了必要的信息。q控件通知消息控件通知消息:当控件的状态发生改变(例如用户利用控件进行输入)时,控件就会向其父窗口发送控件通知消息。MFC对控件通知消息的传递方式与其他以WM_开头的 Windows 消息一样,但 BN_CLICKED 是个例外,该消息的传递方式与命令消息的传递机制一样。q命令消息命令消息:包括来自于菜单、工具栏中的按钮和加速

37、键等用户界面对象的WM_COMMAND 通知消息。前一页 休息47消息映射n声明 宏 p148-149 DECLEAR_MESSAGE_MAP()(.h文件)BEGIN_MESSAGE_MAP()/实现(.cpp).ON_Message(ID,ClassMethod)END_MESSAGE_MAP()n消息映射项 ON_Message(ID,ClassMethod)窗口消息、命令消息、控件通知消息的消息映射项不同,详见P149-150n消息处理方法 afx_msg void ClassMethod();n发送消息SendMessage()直接调用窗口函数 P151n寄送消息PostMessag

38、e()到队列 前一页 休息48 VC中存在几种系统定义的消息分类,不同的前缀符号经常中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:BN按钮控制消息按钮控制消息CBN组合框控制消息组合框控制消息DN默认下压式按钮控制消息默认下压式按钮控制消息EN编辑控制消息编辑控制消息LBN列表框控制消息列表框控制消息SBN滚动条控制消息滚动条控制消息WM窗口消息窗口消息窗口管理消息窗口管理消息初始化消息初始化消息输入消息输入消息系统消息系统消息剪贴板消息剪贴板消息控制处理消息控制处理消息控制通知消

39、息控制通知消息滚动条通知消息滚动条通知消息非用户区消息非用户区消息MDI消息消息DDE消息消息应用程序自定义的消息应用程序自定义的消息Windows编编程常用消息程常用消息 前一页 休息49鼠标作为定位输入设备,通过鼠标单击、双击和拖鼠标作为定位输入设备,通过鼠标单击、双击和拖动功能,用户可以很容易地操作基于动功能,用户可以很容易地操作基于Windows图形图形界面的应用程序。界面的应用程序。常用鼠标消息常用鼠标消息:鼠标消息处理 前一页 休息50鼠标鼠标消息消息lParam包含了鼠标位置包含了鼠标位置低位包含鼠标位置的低位包含鼠标位置的x坐标值坐标值高位包含鼠标位置的高位包含鼠标位置的y坐标

40、坐标wParam包含了指示各种虚键状态的值包含了指示各种虚键状态的值相当于窗口的左上相当于窗口的左上角为原点的坐标值角为原点的坐标值 前一页 休息51对于鼠标消息的处理对于鼠标消息的处理要对要对Shift和和Ctrl键进行监测键进行监测case WM_LBUTTONDOWN:/按下鼠标左键按下鼠标左键 if(wParam&MK_CONTROL)&(wParam&MK_SHIFT)/wParam包含了包含了Shift和和Ctrl键值键值,/即即Shift和和Ctrl键都被按下键都被按下 break;case WM_LBUTTONUP:/释放鼠标左键释放鼠标左键 break;不监测不监测Shift

41、和和Ctrl键键case WM_LBUTTONDOWN:/按下按下鼠标左键鼠标左键 break;case WM_LBUTTONUP:/释放鼠标左键释放鼠标左键 break;前一页 休息52鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例n鼠标消息处理程序鼠标消息处理程序当用户对鼠标进行操作时,会产生响应的消息,系统将把此消息发送到对应的窗口改造例5-1,MyHello程序,添加相应鼠标输入功能 前一页 休息53鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例n声明视图类的数据成员声明视图类的数据成员CString m_MousePoint;/存储鼠标的方式和位置

42、方法:在MyHelloView.h中protected:处 CString m_MousePoint;或右击CMyHelloView类,”Add Member Variable”n在视图类的构造函数中初始化 m_MousePoint=“;(在MyHelloView.cpp中)n修改屏幕重画函数修改屏幕重画函数OnDraw()pDC-Textout(100.100,m_MousePoint);(在MyHelloView.cpp中或双击OnDraw()前一页 休息54鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例n添加鼠标消息WM_LBUTTONDOWN响应函数 类向导 菜单Vi

43、ewClassWizardMessage MapsClassName:CmyHelloView(选择);Object IDs:CMyHelloView (选择);Messages:WM_LBUTTONDOWN(选择);单击“Add Function”同样方法,在CMyHelloView类中,添加鼠标消息WM_LBUTTONUP 和WM_MOUSEMOVE的响应函数nClassWizard自动为应用程序作了三件事:前一页 休息55鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例(1)在CMyHelloView类中添加了三个成员方法,即在MyHelloView.h 中添加了三个响应

44、函数的原型说明 afx_msg void OnLButtonDown(UNIT nFlags,Cpoint point);afx_msg void OnLButtonUp(UNIT nFlags,Cpoint point);afx_msg void OnMouseMove(UNIT nFlags,Cpoint point);(2)在MyHelloView.cpp中添加了个消息映射ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()(3)在MyHelloView.cpp中添加了个响应函数的空函数体void CMyHelloView:OnLBu

45、ttonDown(UNIT nFlags,Cpoint point)void CMyHelloView:OnLButtonUp(UNIT nFlags,Cpoint point)void CMyHelloView:OnMouseMove(UNIT nFlags,Cpoint point)前一页 休息56鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例n编写消息响应函数代码void CMyHelloView:OnLButtonDown(UNIT nFlags,Cpoint point)m_MousePoint.Format(“鼠标左键在点(%d,%d)按下”,point.x,po

46、int.y);Invalidate();/使系统让用户区无效,从而调用重画函数OnDraw()void CMyHelloView:OnLButtonUp(UNIT nFlags,Cpoint point)m_MousePoint=“鼠标左键被释放”;Invalidate();void CMyHelloView:OnMouseMove(UNIT nFlags,Cpoint point)m_MousePoint.Format(“鼠标位于点(%d,%d)按下”,point.x,point.y);Invalidate();前一页 休息57鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例鼠标应用程序实例

47、n查看结果(演示)前一页 休息58键盘消息处理实例键盘消息处理实例键盘消息处理实例键盘消息处理实例键盘消息处理程序当用户对键盘进行操作时,会产生响应的消息,系统将把此消息发送到对应的窗口改造MyHello程序,添加相应键盘的字符输入n声明视图类的数据成员 int m_nLine;/存储回车次数 CString m_strDisplay;/存储当前行输入的字符n在视图类的构造函数中初始化 m_nLine=0;n添加键盘消息WM_CHAR响应函数 “View/ClassWizard/Message Maps(消息映射)”ClassName:CmyHelloView;Object IDs:CMyHe

48、lloView;Messages:WM_CHAR;单击“Add Function”,在CMyHelloView类中,添加键盘消息WM_CHAR 的响应函数 前一页 休息59(1)在CMyHelloView类中添加了一个成员方法,即在MyHelloView.h 中添加了一个响应函数的原型说明 afx_msg void OnChar(UNIT nChar,UINT nReCnt,Unit nFlags);(2)在MyHelloView.cpp中添加了一个消息映射ON_WM_CHAR()(3)MyHelloView.cpp中添加了一个响应函数的空函数体void CMyHelloView:OnChar

49、(UNIT nChar,UINT nReCnt,Unit nFlags)键盘消息处理实例键盘消息处理实例键盘消息处理实例键盘消息处理实例ClassWizard自动为应用程序作了三件事 前一页 休息60n编写消息响应函数代码void CMyHelloView:OnChar(UNIT nChar,UINT nReCnt,Unit nFlags)if(nChar=VK_RETURN)/如按回车键 m_strDisplay.Empty();/清空变量 m_nLine+;/行数加一 else m_strDisplay+=nChar;/将输入的字符添加到变量m_strDisplay的尾端 CClientD

50、C dc(this);/获取客户区设备环境 dc.TextOut(0,m_nLine*20,m_strDisplay);Cview:OnChar(nChar,nRepCnt,nFlags);按键的字符代码值重复击键的次数扫描码和键转换后的状态键盘消息处理实例键盘消息处理实例键盘消息处理实例键盘消息处理实例 前一页 休息61查看结果(演示)键盘消息处理实例键盘消息处理实例键盘消息处理实例键盘消息处理实例 前一页 休息62n技术要点对应位含义07扫描码8扩展键910未使用1112Windows内部使用13组合状态14前一个键的状态15释放/按下状态常用虚拟键盘码虚拟键名称对应键盘键VK_UP光标上

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

当前位置:首页 > 技术资料 > 其他杂项

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

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