收藏 分享(赏)

03_vc_api.ppt

上传人:无敌 文档编号:802636 上传时间:2018-04-25 格式:PPT 页数:35 大小:504KB
下载 相关 举报
03_vc_api.ppt_第1页
第1页 / 共35页
03_vc_api.ppt_第2页
第2页 / 共35页
03_vc_api.ppt_第3页
第3页 / 共35页
03_vc_api.ppt_第4页
第4页 / 共35页
03_vc_api.ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、1,第2讲 Windows 应用程序基础,2,可视化开发系统集成了一系列系统可用资源和开发工具,一、Windows编程基础,3,采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细节代码段,最后构成完整的应用程序,编写Windows程序相当一部分工作是在创建对象和为对象属性赋值,对象特征:具有规范形态和操作模式,4,API,API函数的功能,5,利用Windows API函数编写Windows应用程序必须首先了解以下内容:(1)窗口的概念(2)事件驱动的概念(3)句柄(4)消息,6,(1) 窗口一

2、个应用程序的窗口一般包含下列成分:,7,编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,应用程序与用户之间交互的接口环境,系统管理应用程序的基本单位,Win应用程序基本的操作单元,8,Windows程序设计是针对事件或消息的处理进行,消息是描述事件发生的信息(如按下鼠标或键盘),事件驱动编程方法对于编写交互式程序很有用处,它避免了死板的操作模式,Windows程序的执行顺序取决于事件发生的顺序,程序的执行顺序是由顺序产生的消息驱动的,但是消息的产生往往并不要求有次序之分。,(2)事件驱动,

3、9,常用句柄类型及其说明,(3) 句柄,应用程序通过句柄访问相应的对象信息,HWND窗口句柄HDC设备环境句柄HBITMAP位图句柄HCURSOR光标句柄HICON图标句柄HFONT字体句柄HMENU菜单句柄HPEN画笔句柄HFILE文件句柄HBRUSH画刷句柄HINSTANCE当前实例句柄,10,Windows应用程序利用Windows消息(Message)与应用程序及系统进行信息交换。,typedef struct tagMSG HWND hwnd;窗口句柄,为null,则可检索所有驻留在消息队列中的消息 UINT message;消息值,由Windows.h头文件中的宏定义来标识 WPA

4、RAM wParam;包含有关消息的附加信息,不同消息其值有所不同 LPARAM lParam; DWORD time; 指定消息送至队列的时间 POINT pt;指定消息发送时屏幕光标的位置, 其数据类型POINT也是一个结构体MSG;,附加信息与具体消息号的值有关,在Win中消息用结构体MSG表示,typedef struct tagPOINT LONG x; LONG y; POINT;,(4) 消息,11,(4) 消息 VC中存在几种系统定义的消息分类,不同的前缀符号经常用于消息宏识别消息附属的分类,系统定义的消息宏前缀如下:,BM表示按钮控制消息CB表示组合框控制消息DM表示默认下压

5、式按钮控制消息EM表示编辑控制消息LB表示列表框控制消息SBM表示滚动条控制消息WM表示窗口消息,窗口管理消息初始化消息输入消息系统消息剪贴板消息控制处理消息控制通知消息滚动条通知消息非用户区消息MDI消息DDE消息应用程序自定义的消息,Windows编程常用消息,12,二、Windows应用程序常用消息,1. WM_LBUTTONDOWN:产生单击鼠标左键的消息,此外,相似的消息还有:WM_LBUTTONUP:放开鼠标左键时产生;WM_RBUTTONDOWN:单击鼠标右键时产生;WM_RBUTTONUP:放开鼠标右键时产生;WM_LBUTTONDBLCLK:双击鼠标左键时产生;WM_RBUT

6、TONDBLCLK:双击鼠标右键时产生。,13,2. WM_KEYDOWN:按下一个非系统键时产生的消息,系统键是指实现系统操作的组合键,例如Alt与某个功能键的组合以实现系统菜单操作等。,3. WM_ CHAR:按下一个非系统键时产生的消息,wParam 为按键的ASCII码lParam 与WM_KEYDOWN的相同,wParam:按下键的虚拟键码,用以标识按下或释放的键lParam:记录了按键的重复次数、扫描码、转移代码、先前键的状态等信息。,相似的消息还有WM_KEYUP, 在放开非系统键时产生,如F1的虚拟键码在Windows.h文件中定义为VK_F1,14,4. WM_CREATE:

7、由CreateWindow函数发出的消息,wParam:未用lParam:包含一个指向CREATESTRUCT数据结构的指针,5. WM_CLOSE:关闭窗口时产生的消息,wParam和lParam均未用。,6. WM_DESTROY:由DestroyWiodow函数发出的消息,wParam和lParam均未用。,15,7. WM_QUIT:由PostQuitMessage函数发出的消息,退出应用程序时发出的消息wParam:含退出代码,标识程序退出运行时的有关信息1Param:未用,8. WM_PAINT,16,三、Windows中的事件驱动程序设计,过程驱动方法计算平均成绩,事件驱动方法计

8、算平均成绩,17,四、Windows应用程序组成及编程步骤,1. 应用程序的组成,一个完整的Windows应用程序通常由五种类型的文件组成。,1.C语言源程序文件2.头文件3.模块定义文件4.资源描述文件5.项目文件,18,2. 源程序组成结构,1. 所有应用程序的入口,类似Main函数,2. 完成一系列的定义和初始化,并产生消息循环,WinMain和WinProc是Windows应用程序的主体,19,(1) WinMain函数,三个基本的组成部分:函数说明、初始化和消息循环,WinMain函数,注意!Win是多任务管理的,同一应用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为一个

9、实例,并用一个实例句柄来唯一标识,20,(2) 初始化,(a)窗口类定义,通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种属性。窗口类定义常用以下函数:,21,LoadCursor的作用是在应用程序中加载一个窗口光标HCURSOR LoadCursor(HINSTANCE hInstance, LPCTSTR lpCursorName),光标资源所在的模块句柄,NULL则使用系统预定义光标,光标资源名或系统预定义光标标识名,应用程序调用函数GetStockObject获取系统提供的背景刷HBRUSH GetStockObject(int nBrush);,22,(b)

10、注册窗口类,Win系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,窗口类必须先注册后使用。窗口类的注册由函数RegisterClass()实现。 RegisterClass( /wndclass为窗口类结构 RegisterClass函数的返回为布尔值,注册成功则返回真,23,(c) 创建窗口实例,创建一个窗口类的实例由函数CreateWindow()实现函数原型如下:HWND CreateWindow ( LPCTSTR lpszClassName,窗口类名 LPCTSTR lpszTitle, 窗口标题名 DWORD dwStyle, 创建窗口的样式 int x,y, 窗口左上角

11、坐标 int nWidth,nHeight, 窗口宽度和度高 HWND hwndParent, 该窗口的父窗口句柄 HMENU hMenu, 窗口主菜单句柄 HINSTANCE hInstance, 创建窗口的应用程序当前句柄 LPVOID lpParam 指向一个传递给窗口的参数值的指针 ),24,25,(d)显示窗口,窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口ShowWindow(hwnd,nCmdshow);/nCmdshow为窗口显示形式标识,显示窗口后,应用程序调用UpdateWindow更新并绘制用户区

12、,并发出WM_PAINT消息。 UpdateWindow(hwnd);,26,(3) 消息循环,消息循环的常见格式如下:MSG Msg;while (GetMessage ( ,将消息的虚拟键转换为字符信息,将消息传送到指定窗口函数,将消息传递给窗口函数的相应过程处理,Windows将产生的消息,WinMain函数,27,2 窗口函数WinProc,WinProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,28,窗口函数的一般形式如下:LRESULT CALLBACK WndProc(HW

13、ND hwnd,UINT messgae, WPARAM wParam,LPARAM lParam ) switch(message) message为标识的消息 case break; case WM_DESTROY: PostQuitMessage(0); default: return DefWindowProc(hwnd,message,wParam,lParam); return(0);,在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数: void PostQuitMessage(int nExit

14、Code) /nExitCode为应用程序的退出代码,为未定义处理过程的消息提供缺省处理,29,3数据类型,在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型,30,4. 一些重要的数据结构,MSG:包含一个消息的全部信息,是消息发送的格式,WNDCLASS:包含一个窗口类的全部信息及属性,POINT:定义了屏幕上或窗口中的一个点的X和 Y坐标,RECT:定义了一个矩形区域及其左上角和右下角的坐标,几种重要的结构,31,五、应用程序举例,【例2-1】创建应用程序框架。本例的目的在于说明创建Windows应用程序的方法及过程,#include/包含应用程序中所需的数据类

15、型和数据结构的定义LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); /窗口函数说明/- 以下初始化窗口类 -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInst,LPSTR lpszCmdLine,int nCmdShow) HWND hwnd ; MSG Msg ; WNDCLASS wndclass ; char lpszClassName = 窗口;/窗口类名 char lpszTitle= My_Windows;/窗口标题名,32,/窗口类的定义wndclass.sty

16、le=0;/窗口类型为缺省类型wndclass.lpfnWndProc=WndProc;/定义窗口处理函数wndclass.cbClsExtra=0;/窗口类无扩展wndclass.cbWndExtra=0;/窗口实例无扩展wndclass.hInstance=hInstance;/当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION);/窗口的最小化图标为缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW) ;/窗口采用箭头光标wndclass.hbrBackground=GetStockObject(

17、WHITE_BRUSH);/窗口背景为白色wndclass.lpszMenuName=NULL;/窗口中无菜单wndclass.lpszClassName=lpszClassName ;/窗口类名为窗口,33,/- 以下进行窗口类的注册 -if(!RegisterClass( ,/- 创建窗口 - hwnd=CreateWindow(lpszClassName,/窗口类名lpszTitle,/窗口实例的标题名WS_OVERLAPPEDWINDOW,/窗口的风格CW_USEDEFAULT,CW_USEDEFAULT,/窗口左上角坐标为缺省值CW_USEDEFAULT,CW_USEDEFAULT,

18、/窗口的高和宽为缺省值NULL,/此窗口无父窗口NULL,/此窗口无主菜单hInstance,/创建此窗口的应用程序的当前句柄NULL /不使用该值);,34,/- 显示窗口 -ShowWindow( hwnd, nCmdShow) ;,/- 绘制用户区 -UpdateWindow(hwnd);,/- 消 息 循 环 - while( GetMessage(/消息循环结束即程序终止时将信息返回系统,35,/窗口函数LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam) switch(message) case WM_DESTROY:PostQuitMessage(0);default:/缺省时采用系统消息缺省处理函数return DefWindowProc(hwnd,message,wParam,lParam); return(0);,调用PostQuitMessage发出WM_QUIT消息,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报