windows编程基础剖析

上传人:今*** 文档编号:107501316 上传时间:2019-10-19 格式:PPT 页数:25 大小:285.50KB
返回 下载 相关 举报
windows编程基础剖析_第1页
第1页 / 共25页
windows编程基础剖析_第2页
第2页 / 共25页
windows编程基础剖析_第3页
第3页 / 共25页
windows编程基础剖析_第4页
第4页 / 共25页
windows编程基础剖析_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《windows编程基础剖析》由会员分享,可在线阅读,更多相关《windows编程基础剖析(25页珍藏版)》请在金锄头文库上搜索。

1、Windows编程基础,Windows编程基础,Windows编程概述 窗口组成 句柄及windows消息 Windows应用程序基本结构 Windows编程方法介绍 利用API编程-传统方法 利用MFC编程 利用API编程举例 利用MFC编程举例,一、Windows编程概述,Windows是一个应用于微型计算机的具有图形化用户界面的操作系统。 特点: 图形化的窗口界面。 虚拟化的设备接口 如图形设备接口(CDI):是一个与设备无关的图形化显示模式接口。 窗口、消息、句柄等是Windows编程需要了解的基本概念。 窗口 窗口分非工作区和工作区两部分。 非工作区:包括窗体边界、标题、菜单、工具栏

2、、状态栏等,由系统控制。 工作区:用于用户数据的交互。由用户操作。,1 窗口 一个应用程序的窗口一般包含下列成分:,1 窗口,编写一个Windows应用程序首先应创建一个或多个窗口,随后应用程序的运行过程即是窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与数据交换的过程。,2 句柄及windows消息,Windows程序的执行取决于事件的触发(事件驱动),由于事件的触发而提供的信息称消息。消息是windows应用程序与windows系统间、 windows应用程序间或windows应用程序内部窗口间信息交换的纽带。 应用程序中有各个对象存在,每个对象都有一个由4字节长的数值构成的标识,这

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

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

5、息,二、 Windows应用程序基本结构,Windows应用程序与控制台(DOS)应用程序一样有一个入口函数。 控制台应用程序的入口函数:main;Windows应用程序的入口函数:WinMain。,(1) WinMain函数,注意!Win是多任务管理的,同一应用程序的多个窗口可能会同时存,Win系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识,(1) WinMain函数,WinMain函数被声明成为返回一个int值,同时还有APIENTRY或WINAPI标识符的修饰 。,APIENTRY:API Entry,函数调用约定 ,windef.h中有定义(在windows.h文件包含了

6、windef.h ): #define WINAPI _stdcall #define APIENTRY WINAPI,函数调用约定主要约束了两件事: 1.确定参数传递顺序 2.确定调用堆栈由谁(调用函数或被调用函数)清理,_stdcall表示 1.参数从右向左压入堆栈 2.函数被调用者修改堆栈 3.函数名(在编译器这个层次)自动加前导的下划线,后面紧跟一个符号,其后紧跟着参数的尺寸 在win32应用程序里,宏APIENTRY,WINAPI,都表示_stdcall,非常常见。,在WinMain函数中定义窗口类(窗体的风格)、注册窗口类、创建窗口、显示窗口、建立消息循环。,定义窗口类:WNDCL

7、ASS wndclass ; / WNDCLASS为结构体,设置窗口基本属性,typedef struct UINT style; / 窗口的风格 WNDPROC lpfnWndProc;/ 指定窗口的消息处理函数的窗口过程函数 int cbClsExtra;/ 指定分配给窗口类结构之后的额外字节数 int cbWndExtra; / 指定分配给窗口实例之后的额外字节数 HINSTANCE hInstance; / 指定窗口过程所对应的实例句柄 HICON hIcon; / 指定窗口的图标 HCURSOR hCursor; / 指定窗口的鼠标指针 HBRUSH hbrBackground; /

8、 指定窗口的背景画刷 LPCTSTR lpszMenuName;/ 窗口的菜单资源名称 LPCTSTR lpszClassName;/ 该窗口类的名称 WNDCLASS, *PWNDCLASS;,设置窗口基本属性 wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; wndclass.hIcon = LoadIcon (NULL,

9、 IDI_APPLICATION) ; wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = “HelloWin“; / 窗口类名,注册窗口类:RegisterClass (&wndclass),创建窗口: CreateWindow hwnd = CreateWindow (“HelloWin“, / 窗口类名,要与注册时指定的相同 “我的

10、窗口“, / 窗口标题 WS_OVERLAPPEDWINDOW, / 窗口样式 CW_USEDEFAULT, / 窗口最初的 x 位置 CW_USEDEFAULT, / 窗口最初的 y 位置 480, / 窗口最初的 x 大小 320, / 窗口最初的 y 大小 NULL, / 父窗口句柄 NULL, / 窗口菜单句柄 hInstance, / 应用程序实例句柄 NULL) ; / 创建窗口的参数,ShowWindow (hwnd, nCmdShow) ; / 显示窗口 UpdateWindow (hwnd) ; / 更新窗口,包括窗口的客户区,消息循环:当从应用程序消息队列中检取的消息是WM

11、_QUIT时,则退出循环 while (GetMessage (/ 将消息发送给窗口过程,这里是WndProc ,(2) 窗口处理函数,也称回调函数,处理发送给窗口的消息 。 LRESULT CALLBACK WndProc( HWND hwnd, /窗口句柄 UINT message, /消息值 WPARAM wParam, /字消息附加参数 LPARAM lParam); /长消息附加参数,LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) HDC hdc; PAINTSTRUCT

12、 ps; RECT rc; switch (message) case WM_CREATE:/ 窗口创建产生的消息 return 0 ; case WM_PAINT: hdc= BeginPaint( hwnd, / 默认的消息处理 ,三、 Windows编程方法介绍,利用API编程-传统方法 微软提供了一套SDK工具, SDK:Software Development Kit, 即软件开发工具包 用这种方法编写Windows程序非常繁杂困难。 例子Win1 利用MFC编程 Microsoft Foundation Class Library,微软基本类库,由微软的AFX小组于1992年创建,

13、MFC类库拥有一个庞大的、扩展的C+类层次结构,封装了SDK结构、功能及应用程序框架的内部技术。由于有了MFC,使我们不必过多做关于界面的设计与实现的工作,而是专注于项目本身的功能实现。 MFC包含100多个类,大概可分为以下几种类型:,MFC类的种类(不同书归纳有所不同),根类:CObject:MFC抽象类,提供公共操作:对象的建立和删除,串行化支持等 应用程序框架类:用于构造应用程序的框架,提供公用功能,包括与命令相关的类(CCmdTarget)、窗口应用程序类(CWinApp)、窗口类(CWnd)、文档类(CDocument)、视图类(CView)等。由CWnd派生出来的窗口类包括:标准

14、框架(CFrameWnd)、MDI主/子框架(CMDIFrameWnd/CMDIChildWnd)、对话框(CDialog)、控件(CButton、CStatic、CEdit、CListBox、CComboBox、CScrollBar等) 图形处理类:包括图形设备接口(GDI)类(CGdiObject)和设备环境(DC)类(CDC),CGdiObject类派生类包括:画笔(CPen)、GDI画刷(CBrush)、字体(CFont)、位图(CBitmap)、GDI调色板(CPalette)、绘图区v(CRng)等。CDC派生类包括:客户区设备环境(CClientDC)、全窗口设备环境(CWind

15、owDC)、WM_PAINT消息用设备环境(CPaintDC)、元文件设备环境(CMetaFileDC)等。 文件服务类:文件类(CFile) 数组、列表和映像类 Internent服务类 数据库类 OLE类 调试和异常类,MFC创建程序框架:例子Win2,应用类有成员函数:InitInstance、Run、ExitInstance等。 InitInstance是一个必须覆盖的CWinApp成员函数。 用应用类定义了一个唯一的全局对象theApp。,MFC建立的windows应用程序一样有一个程序入口函数WinMain。 可以通过查看“Microsoft Visual StudioVC98MF

16、CSRC”文件夹的APPMODUL.CPP及WINMAIN.CPP文件了解。 WINMAIN.CPP中的AfxWinMain函数有其InitInstance、Run、ExitInstance的执行顺序。,WinMain执行的顺序,(1) InitInstance函数,通过例win2可以了解其作用,在没有混淆的情况下可以理解InitInstance函数就是入口函数。 通过例win2也可以了解不同框架的InitInstance实现的异同。,(2) Run函数,用于处理消息循环 如果没有消息,则调用CWinApp的成员函数OnIdle。,(3) ExitInstance函数,终止应用程序时调用。 如果终止时要释放内存等清理工作,可通过重载此函数实现。,消息映射,MFC框架程序一样要处理消息。MFC框架程序将所有的

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

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

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