2 Windows应用程序的组成

上传人:仙*** 文档编号:165688690 上传时间:2022-10-29 格式:DOC 页数:5 大小:54.50KB
收藏 版权申诉 举报 下载
2 Windows应用程序的组成_第1页
第1页 / 共5页
2 Windows应用程序的组成_第2页
第2页 / 共5页
2 Windows应用程序的组成_第3页
第3页 / 共5页
资源描述:

《2 Windows应用程序的组成》由会员分享,可在线阅读,更多相关《2 Windows应用程序的组成(5页珍藏版)》请在装配图网上搜索。

1、典型的Windows程序结构:1典型的Windows程序结构 在Windows程序中,入口函数(WinMain()中有一个由while语句组成的消息循环,其中调用了诸如获取消息、键盘消息转换、派送消息和窗口处理等API函数。循环直到取得退出消息结束。 在Windows程序中还有一个由操作系统的API函数回调(Callback)的窗口处理函数(WndProc(),根据消息值转向相应的消息处理,这是由switch语句组成的多项选择。2入口函数WinMain()控制台应用程序是以main函数作为程序入口,但是在Windows应用程序中,main被WinMain函数取代.它首先完成窗口类的注册,创建窗

2、口,而后进入消息循环,根据接受的消息调用相应的处理过程。当消息搜索到WM_QUIT的时候,中止程序运行。WinMain的原型:int WINAPI WinMain(HINSTANCE hInstance, 当前实例句柄 HINSTANCE hPrevInstance, 以前的实例句柄 LPSTR lpCmdLine, 指向命令行参数的指针 int nCmdShow 窗口的显示状态 )另外在函数名Winmain和返回值类型int之间出现的WINAPI是指的一种堆栈调用约定。WinMain的初始化的主要步骤:定义窗口类:通过给窗口类数据结构WNDCLASS赋值,设置窗口类的各种属性。typedef

3、 struct tagWNDCLASSA UINT style; /窗口风格 WNDPROC lpfnWndProc; /指向窗口处理函数的指针 int cbClsExtra; /保留字 int cbWndExtra; /保留字 HINSTANCE hInstance; /注册该窗口类的实例句柄 HICON hIcon; /代表该窗口类的图标句柄 HCURSOR hCursor; /该窗口客户区鼠标光标句柄 HBRUSH hbrBackground; /该窗口客户区背景颜色句柄 LPCSTR lpszMenuName; /指向该窗口菜单名的字符指针 LPCSTR lpszClassName;

4、/指向该窗口名的字符指针 WNDCLASSA, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA;常见的窗口风格定义如下:CS_HREDRAW 如果窗口客户区宽度发生改变,重绘整个窗口CS_VREDRAW 如果窗口客户区高度发生改变,重绘整个窗口CS_DBLCLKS 能感受用户在窗口中的双击消息CS_NOCLOSE 禁用系统菜单中的“关闭”命令CS_OWNDC 为该窗口类的各窗口分配各自独立的设备环境CS_CLASSDC 为该窗口类的各窗口分配一个共享的设备环境CS_PARENTDC 指定子窗口继承其父窗口的设备环境CS_SAVEBITS 把被窗

5、口遮掩的屏幕图象部分作为位图保存起来。当该窗口被移动时,Windows使用被保存的位图来重建屏幕图象注册窗口:窗口类必须先注册后使用,采用窗口注册函数。一个应用程序可以有许多窗口,但只有一个是主窗口,它是与该应用程序的实例句柄唯一关联的。通常要定义一个窗口类结构WNDCLASS并作出相应的设置,然后调用RegisterClass ()对该窗口类进行注册。每个窗口都有一些基本的属性,如窗口边框、窗口标题栏文字、窗口大小和位置、鼠标、背景色、处理窗口消息函数的名称等等。注册的过程也就是将这些属性告诉系统,然后再调用CreateWindow()函数创建出窗口。这也就象你去裁缝店订做一件衣服,先要告诉

6、店老板你的身材尺寸、布料颜色、以及你想要的款式,然后他才能为你做出一件让你满意的衣服。BOOL RegisterClass(&wndclass) / wndclass为窗口结构创建窗口实例:由函数CreateWindow创建窗口实例当窗口类注册完毕之后,并不会有窗口显示出来,因为注册的过程仅仅是为创建窗口所做的准备工作。实际创建一个窗口的是通过调用CreateWindow()函数完成的。窗口类中已经预先定义了窗口的一般属性,而CreateWindow()中的参数可以进一步指定一个窗口的更具体的属性,在Win32程序中,是调用如下CreateWindow()函数来创建窗口的,并且返回一个主窗口句

7、柄。HWND CreateWindow( LPCSTR lpClassName, /窗口类名 LPCSTR lpWindowName, /窗口标题名 DWORD dwStyle, /创建窗口的样式 int X, /窗口左上角x坐标 int Y, /窗口左上角y坐标 int nWidth, /窗口宽度 int nHeight, /窗口高度 HWND hWndParent , /窗口的父窗口句柄,通常设为NULL HMENU hMenu, /窗口主菜单句柄 HINSTANCE hInstance, /创建窗口的应用程序当前句柄LPVOID lpParam); /指向一个传递给窗口的参数值的指针其中

8、参数dwStyle指明了创建窗口的样式:#define WS_OVERLAPPED 0x00000000L /带边框和标题#define WS_POPUP 0x80000000L /弹出式#define WS_MINIMIZE 0x20000000L /最小化#define WS_MAXIMIZE 0x01000000L /最大化#define WS_CAPTION 0x00C00000L /带标题栏#define WS_BORDER 0x00800000L /带边框#define WS_VSCROLL 0x00200000L /带垂直滚动条#define WS_HSCROLL 0x00100

9、000L /带水平滚动条#define WS_SYSMENU 0x00080000L /带系统菜单#define WS_MINIMIZEBOX 0x00020000L /带最小化框#define WS_MAXIMIZEBOX 0x00010000L /带最大化框/带边框,标题,系统菜单以及最大最小化框的窗口#define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX)窗口显示:窗口类的显示是由ShowWindow()和U

10、pdateWindow()函数实现的。应用程序通过调用ShowWindow(hwnd,nCmdShow)在屏幕上显示窗口,hwnd为窗口句柄,参数nCmdShow确定出窗口显示的方式。#define SW_HIDE 0 /隐藏窗口#define SW_SHOWNORMAL 1 /显示并激活窗口#define SW_SHOWMINIMIZED 2 /显示并最小化窗口#define SW_SHOWMAXIMIZED 3 /显示并最大化窗口显示窗口后,应用程序通过调用UpdateWindow(hwnd)函数通过窗口处理函数WndProc()发送WM_PAINT消息重绘显示区域。WinMain的消息循

11、环while(GetMessage(&msg,NULL,0,0) /进入消息循环 TranslateMessage(&msg); /转换键盘消息 DispatchMessage(&msg); /将消息发送给窗口过程,这里是WndProc return msg.wParam; 其中GetMessage()原型如下:GetMessage( LPMSG lpMsg, /指向MSG结构的指针 HWND hWnd , /窗口句柄,特殊含义,设为NULL UINT wMsgFilterMin, /消息过滤的最小信息号 UINT wMsgFilterMax); /消息过滤的最大信息号只从消息队列中取出的值不

12、为WM_QUIT,GetMessage就返回一个非零值,否则就结束消息循环并退出应用程序。3窗口函数WndProc() 窗口函数WndProc定义了应用程序对接受到的不同消息的响应,包含了对各种可能接受到的消息的处理过程。WndProc函数由一个或者多个switch语句构成,每一条case语句对应一种消息,当应用程序接受到一个消息,相应的case语句被激活,并执行相应的响应程序模块。一般形式如下:switch(message)case WM_CREATE: /窗口创建消息 return 0;case WM_LBUTTONDOWN: /单击鼠标左键消息 /用户操作 return 0;case W

13、M_RBUTTONDOWN: /单击鼠标右键消息 /用户操作 return 0;case WM_DESTROY: /窗口关闭时产生的消息 PostQuitMessage(0); return 0;return DefWindowProc(hwnd,message,wParam,lParam) ;总的来说,一个简单的Windows应用程序的流程如下:1 注册窗口类2 创建窗口类3 显示窗口4 定义窗口函数WndProc(消息响应函数)5 进入消息循环,直到收到WM_QUIT附: Windows常用的数据类型 Windows数据类型 基本数据类型 说明BOOL bool 布尔值BSTR unsig

14、ned short * 32位字符指针BYTE unsigned char 8位无符号整数COLORREF unsigned long 用作颜色值的32位值DWORD unsigned long 32位无符号整数,段地址和相关的偏移地址LONG long 32位带符号整数LPARAM long 作为参数传递给窗口过程或回调函数的32位值LPCSTR const char * 指向字符串常量的32位指针LPSTR char * 指向字符串的32位指针LPVOID void * 指向未定义类型的32位指针LRESULT long 来自窗口过程或回调函数的32位返回值UINT unsigned int 32位无符号整数WORD unsigned short 16位无符号整数WPARAM unsigned int 当作参数传递给窗口过程或回调函数的32位值

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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