设为首页 加入收藏

TOP

1.2.2 Windows应用程序框架结构(1)
2013-10-07 13:19:50 来源: 作者: 【 】 浏览:65
Tags:1.2.2 Windows 应用程序 框架结构

1.2.2  Windows应用程序框架结构(1)

Windows应用程序都具有相对固定的基本框架结构,由WinMain函数和窗口函数等构成。WinMain函数和窗口函数是Windows应用程序的主体。

1.入口函数

如同C语言的main函数一样,任何Windows应用程序都是由入口函数WinMain开始的。WinMain函数是在WINBASE.H中定义的,它的函数原形如下:

  1. int WINAPI WinMain(HINSTANCE hInstance,  
  2.                 HINSTANCE hPrevInstance,  
  3.                 LPSTR lpCmdLine,  
  4.                 int nShowCmd); 

函数说明如下。

hInstance:应用程序的实例句柄,这个实例句柄是程序的唯一标识。hPrevInstance:该参数用来检查是否有多个程序实例运行,由于Windows 9X和Windows NT(包括更高版本)是32位操作系统,该参数通常设置为NULL。lpCmdLine:一个指向字符串的指针,用来保存运行程序时的命令行参数。nShowCmd:指定程序开始的时候如何显示。

2.定义并注册窗口类

在Windows中如果要创建一个窗口,首先要定义窗口类,然后注册这个窗口类。定义窗口类是通过填充WNDCLASS结构体来完成的,此结构体是在WINUSER.H中定义的,它的结构体声明如下:

  1. typedef struct_WNDCLASS{  
  2.     UINT style;  
  3.     WNDPROC lpfnWndProc;  
  4.     int cbClsExtra;  
  5.     int cbWndExtra;  
  6.     HANDLE hInstance;  
  7.     HICON hIcon;  
  8.     HCURSOR hCursor;  
  9.     HBRUSH hbrBackground;  
  10.     LPCTSTR lpszMenuName;  
  11.     LPCTSTR lpszClassName;  
  12. }WNDCLASSA,* PWNDCLASSA, NEAR * NPWNDCLASSA, FAR * LPWNDCLASSA; 

结构体说明如下。style:指定窗口风格,可以为如表1.3所示的各种数值组合。

表1.3  Windows应用程序窗口风格

取值< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

说明

CS_VREDRAW

垂直重画

CS_HREDRAW

水平重画

CS_OWNDC

独占设备描述表

CS_SAVEBITS

保存窗口覆盖区

CS_DBCLKS

允许两次连续按动

CS_BYTEALLGNCLIENT

鼠标用户区域按字节对齐显示

CS_BYTEALLGNWINDOW

鼠标用户窗口按字节对齐显示

CS_NOCLOSE

系统菜单中没有CLOSE菜单项

lpfnWndProc:指向窗口过程的指针,必须使用CallWindowProc函数调用窗口过程。cbClsExtra:窗口类结构体之后分配的额外的字节数,系统将该值初始化为0。cbWndExtra:窗口实例之后分配的额外的字节数,系统将该值初始化为0,如果使用资源文件里的CLASS指令创建对话框,并用WNDCLASS注册该对话框时,cbWndExtra必须设置成DLGWNDOWEXTRA。hInstance:包含该窗口类实例的句柄。hIcon:标识窗口类图标的句柄,必须为一个图标资源的句柄,如果设置为NULL,系统将提供默认图标。hCursor:标识窗口类光标的句柄,必须为一个指针资源的句柄,如果设置为NULL,应用程序必须在指针移入应用程序窗口时显式设置指针类型。hbrBackground:窗口背景画刷的句柄,该成员或者是用于绘制背景的物理画刷的句柄,或者是一个颜色值。lpszMenuName:指向NULL结束的字符串,该字符串描述菜单的资源名,如同在资源文件里显示的名字一样,如果使用一个整数标识菜单,可以使用MAKEINTRESOURCE宏,如果将lpszMenuName设置为NULL,那么窗口类的窗口将没有默认菜单。lpszClassName:指向一个以NULL结尾的字符串,该字符串定义了窗口类的名字。

定义好窗口类后,就可以通过函数RegisterClass注册该窗口,它的函数原型如下:

  1. ATON RegisterClass(CONST WNDCLASS *lpWndClass); 

函数说明如下。

返回值:成功返回值是唯一标识已注册的类的一个原子,否则返回0。lpWndClass:指向一个WNDCLASS结构体的指针。

3.创建并显示窗口

完成定义和注册窗口类后,接下来应该创建并显示该窗口。创建一个窗口要使用CreateWindow函数来完成,它的函数原型如下:

  1. HWND CreateWindow(LPCTSTR lpClassName,   
  2.                     LPCTSTR lpWindowName,   
  3.                     DWORD dwStyle,   
  4.                     int x,   
  5.                     int y,   
  6.                     int nWidth,   
  7.                     int nHeight,   
  8.                     HWND hWndParent,   
  9.                     HMENU hMenu,   
  10.                     HANDLE hlnstance,   
  11.                     LPVOID lpParam);  

函数说明如下。

返回值:成功返回新窗口的句柄,否则返回NULL。lpClassName:指向NULL结束的字符串或整型数atom。lpWindowName:指向一个指定窗口名的以NULL结束的字符串指针。dwStyle:指定创建窗口的风格,可以为如表1.4所示的各种数值组合。

表1.4  Windows应用程序创建窗口的风格

取值

说明

WS_BORDER

创建一个有边框的窗口

WS_CAPTION

创建一个有标题栏的窗口

WS_CHILDWINDOWWS_CHILD

创建一个子窗口(不能与WS_POPUP一起使用)

WS_CLIPCHILDREN

当在父窗口内绘制时,把子窗口

占据的区域剪切在外,即不在该区域内绘图

(续表)

取值

说明

WS_CLIPSIBLINGS

裁剪相互有关系的子窗口,不在被其他子窗口

覆盖的区域内绘图,仅与WS_CHILD一起使用

WS_DISABLED

创建一个初始被禁止的窗口

WS_DLGFRAME

创建一个有双边框但无标题的窗口

WS_HSCROLL

创建一个带水平滚动条的窗口

WS_VSCROLL

创建一个带垂直滚动条的窗口

WS_ICONIC

创建一个初始为图标的窗口,仅可以与

WS_OVERLAPPEDWINDOWS一起使用

WS_MAXIMIZE

创建一个最大尺寸的窗口

WS_MINIMIZE

创建一个最小尺寸的窗口(即图标)

WS_MAXIMIZEBOX

创建一个带有极大框的窗口

WS_MINIMIZEBOX

创建一个带有极小框的窗口

WS_OVERLAPPED

创建一个重叠式窗口,重叠式窗口带有标题和边框

WS_POPUP

创建一个弹出式窗口,不能与WS_CHILD一起使用

WS_SYSMENU

窗口带有系统菜单框,仅用于带标题栏的窗口

WS_THICKFRAME

创建一个边框的窗口,使用户可以直接缩放窗口

WS_VISIBLE

创建一个初始可见的窗口

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇1.2.2 Windows应用程序框架结构(.. 下一篇1.3.2 C运行时(CRT)库

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: