版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第3讲 Windows 应用程序,要点: 1、窗口、事件驱动、句柄、消息 2、Windows应用程序组成及编程步骤,Windows应用程序,Microsoft Windows 操作系统为应用程序提供了一个由窗口和菜单结构构成的多任务环境。 利用Visual的开发平台,开发的具有Windows标准的操作界面,交互式的操作方法 的应用程序,一、Windows编程基础,SDK:软件开发工具包 (Software Development Kit ),采用交互式方法时,可视化开发平台给出了许多选用的对象,程序员可选择所需对象并确定其属性,由此搭建起应用程序的“大框架”,并可根据需要进一步编写必要的细
2、节代码段,最后构成完整的应用程序,编写Windows 程序相当一部分工 作是在创建对象和 为对象属性赋值,对象特征:具有规范形态和操作模式,API,API函数 的功能,MFC,MFC 的功能,SDK编程与MFC编程,为了使用 API 函数,编程时就要用到 API 所对应的 .H 和 .LIB 文件,而 SDK 正是提供了一整套开发 Windows 应用程序所需的相关文件、范例和工具的“工具包”。 所以人们也常把仅使用 API 来编写 Windows 应用程序的开发方式叫做“SDK编程”。而 API 和 SDK 是开发 Windows 应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之
3、上的。 比如MFC,虽然他们比起“SDK 编程”来有着更高的抽象度,但这丝毫不妨碍它们在需要的时候随时直接调用 API 函数。 学习C+,最好是先学用SDK编写程序,在此期间掌握Windows操作系统的工作原理和各API函数的应用,然后再深入MFC编程。,编写Windows应用程序必须首先了解以下内容: (1)窗口 (2)事件驱动 (3)句柄 (4)消息,SDK编程,(1) 窗口 一个应用程序的窗口一般包含下列成分:,编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,应用程 序与用 户之间
4、交互的 接口环 境,系统管理 应用程序 的基本单位,Win应用程序 基本的操作单元,Windows程序设计是针对事件或消息的处理进行,消息是描述事 件发生的信息 (如按下鼠标或键盘),交互式程序采用了事件驱动编程方法。,程序的执行顺序:执行顺序取决于事件发生的顺序,由事件发生的顺序产生的消息驱动程序。,(2)事件驱动,事件驱动过程:,常用句柄类型及其说明,(3) 句柄,应用程序通过 句柄访问相应 的对象信息,HWND 窗口句柄 HDC 设备环境句柄 HBITMAP 位图句柄 HCURSOR 光标句柄 HICON 图标句柄 HFONT 字体句柄 HMENU 菜单句柄 HPEN 画笔句柄 HFIL
5、E 文件句柄 HBRUSH 画刷句柄 HINSTANCE 当前实例句柄,Windows应用程序利用消息(Message)与应用程序及系统进行信息交换。,(4) 消息,BM 表示按钮控制消息 CB 表示组合框控制消息 DM 表示默认下压式按钮控制消息 EM 表示编辑控制消息 LB 表示列表框控制消息 SBM 表示滚动条控制消息 WM 表示窗口消息,窗口管理消息 初始化消息 输入消息 系统消息 剪贴板消息 控制处理消息 控制通知消息 滚动条通知消息 非用户区消息 MDI消息 DDE消息 应用程序自定义的消息,系统定义的消息宏前缀,Windows常用消息,事件 消息 放开鼠标左键 WM_LBUTTO
6、NUP 单击鼠标右键 WM_RBUTTONDOWN 放开鼠标右键 WM_RBUTTONUP 双击鼠标右键 WM_RBUTTONDBCLK 用户区移动或显示、 用户窗口改变大小等 WM_PAINT,二、Windows中的事件驱动程序设计,过程驱动方法计算平均成绩,事件驱动方法计算平均成绩,三、Windows应用程序的基本结构,1. 应用程序的组成,一个完整的Windows应用程序通常由五种类型的文件组成。,1.C语言源程序文件(.cpp) 2.头文件(.h) 3.模块定义文件(.def) 4.资源描述文件(.re) 5.项目文件 (vcproj),2. 源程序组成结构,1. 所有应用程序的入口,
7、类似Main函数, 2. 完成一系列的定义和初始化,并产生消息循环,WinMain和WndProc是 Windows应用程序的主体,(1) WinMain函数,(2) 初始化,初始化,显示窗口,创建窗口实例,窗口类的注册:窗口类必须先注册后使用,窗口类的定义:定义窗口的形式与功能,RegisterClass,CreateWindow,ShowWindow ,UpdateWindow,显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,并发出WM_PAINT消息。,(3) 消息循环,将消息传递给WndProc函数的相应过程处理,Windows将产生的消息,WinMain函数,2 窗
8、口函数WndProc,WndProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。,3数据类型,在Windows.h中定义了Windows 应用程序中包含种类繁多的数据类型,4. 一些重要的数据结构,MSG:包含一个消息的全部信息,是消息发送的格式,WNDCLASSEX:包含一个窗口类的全部信息及属性,POINT:定义了屏幕上或窗口中的一个点的X和 Y坐标,RECT:定义了一个矩形区域及其左上角和右下角的坐标,几种重要的结构,Windows应用程序示例: 创建步骤: 创建解决方案 创建项目 选
9、择项目类型:Win32 选择模板: Win32 项目 | Win32应用程序 | 空项目 编辑.cpp程序 编译.cpp程序 链接.obj程序 运行.exe程序,P52 例3-1 Windows SDK 应用程序示例,生成Windows窗口: #include #include #define IDC_BUTTON1 100 HINSTANCE hInst; LRESULT CALLBACK WndProc(HWND hwnd,UINT message,WPARAM wParam,LPARAM lParam); int WINAPI WinMain(HINSTANCE hInstance,HI
10、NSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) WNDCLASSEX wcex; HWND hWnd; MSG msg; TCHAR szWindowClass=LMy Windows; TCHAR szTitle=LWindows SDK 应用程序; /窗口标题,/窗口类定义 wcex.cbSize=sizeof(WNDCLASSEX); wcex.style=0; wcex.lpfnWndProc=WndProc; wcex.cbClsExtra=0; wcex.cbWndExtra=0; wcex.hInstance=hInstan
11、ce; wcex.hIcon=LoadIcon(hInstance,MAKEINTRESOURCE(IDI_APPLICATION); wcex.hCursor=LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH); wcex.lpszMenuName=NULL; wcex.lpszClassName=szWindowClass; /窗口示例 wcex.hIconSm=LoadIcon(wcex.hInstance,MAKEINTRESOURCE(IDI_APPLICATION)
12、;,/注册窗口类 if (!RegisterClassEx( ,/WndProc程序(1): LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, message, wParam, lParam); break; return 0; ,/WndProc程序(2): LRESULT CALLBACK
13、WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) case WM_COMMAND: switch (LOWORD(wParam) case IDC_BUTTON1: /点击按钮 MessageBox(hwnd, _T(欢迎进入子窗口!), _T(SDK), MB_OK|MB_ICONEXCLAMATION); break; return 0; case WM_CREATE: /创建子窗口控件 CreateWindow(_T(STATIC), _T(Windows SDK 应用程序示例), WS_CHILD|WS_VISIBLE|SS_CENTER,180,100,250,30, hwnd, NULL, hInst, NULL); CreateWindow(_T(BUTT
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 福建龙净环保股份有限公司投资分析报告
- 2023云南特岗生物历年真题同源模拟题及精准答案
- 2024粮油仓储管理员考试初级专属备考试题及答案解析
- 2024年江苏省建筑安全员C1证考试改革后新版题库及答案
- 2022年全国保育师统考幼儿养育照护真题及答案解析
- 2026年《诗经二首》测试题及答案
- 2021会考化学历年真题试题及知识点串联答案解析
- 旧校区家装电梯协议书
- 津心登买卖协议书号
- 精神科病人保护性约束
- 幼儿园班本课程《蒜出精彩》
- 肿瘤学-肿瘤姑息治疗
- 房屋无偿使用协议书范本
- DB32T3916-2020建筑地基基础检测规程
- 2024中国心衰器械白皮书-沙利文
- 人事档案情况摘抄表
- 正常分娩9版妇产科学课件
- 常见的六轴关节机器人的机械结构
- 2023年中国电信集团有限公司招聘笔试题库及答案解析
- HY/T 174-2014水下营养盐自动分析仪
- GB/T 37361-2019漆膜厚度的测定超声波测厚仪法
评论
0/150
提交评论