再上一篇:2.2 一些新概念
上一篇:2.3 注册窗口类
主页
下一篇:2.5 显示窗口
再下一篇:2.6 消息循环
文章列表

2.4 创建窗口

《Windows 下的 C/C++高级编程》讲述Windows环境下调用Win32 API函数程序设计

窗口类定义了窗口的一般的特征,而窗口与显示关系比较密切的一些细节特征尚未指定。因此,基于同一个窗口类可以创建多个不完全相同的窗口,这一工作在 CreareWindow函数中完成。

创建窗口类所需的各个信息“打包”在一个WNDCLASS结构中传给RegisterClass函数,而创建具体窗口所需的信息则各自作为单独的参数传递给 CreateWindow 函数。以下是HelloWin中的CreateWindow函数调用:

hwnd = CreateWindow( szClassName, //窗口类名称

TEXT("The HelloWin Program"), //窗口标题

WS_OVERLAPPEDWINDOW, //窗口显示风格

CW_USEDEFAULT, //初始x方向的位置

CW_USEDEFAULT, //初始y 方向的位置

CW_USEDEFAULT, //初始x方向的大小

CW_USEDEFAULT, //初始y方向的大小

NULL, //父窗口句柄

NULL, //菜单句柄

hInstance, //程序实例句柄

#第21页~ Windows下的C/C++高级编程

NULL ); //创建参数

当然,这里也有ASCII版本的CreateWindowA函数和Unicode版本的CreateWindowW函数的区别,这里就不再详述了。

第一个参数是窗口类名称,这里是字符串“HelloWinClass”。请注意,我们正是通过这个窗口类名称把正在创建的窗口与前面定义过的某个窗口类关联起来。

第二个参数是窗口标题,就是显示在窗口标题栏中的文本,这里是“The Hello Program”。

第三个参数是窗口的显示风格。这里设置为WS_OVERLAPPEDWINDOW,这样的窗口含有一个标题栏,标题栏的左边有一个窗口图标和窗口标题,点击窗口图标会出现系统菜单,标题栏的右边有最小化、最大化和关闭按钮,窗口四周还有一个显示窗口大小的边框。在WINUSER.H 中 定义 了一 系列 以 WS_ 为前 缀的 窗口 显示 风格 ,其 中WS_OVERLAPPEDWINDOW是标准窗口风格,其定义为几种位标示的“位或”。

#define WS_OVERLAPPEDWINDOW( WS_OPVERLAPPED |

WS_CAPTION |

WS_SYSMENU |

WS_THICKFRAME |

WS_MINIMIZEBOX |

WS_MAXIMIZEBOX )

具 体 可 参 阅 MSDN/Platform SDK/User Interface Services/Windows UserInterface/Windowing/Windows/Window Reference/Window Styles。

第 4 到第 7 个参数用于指定窗口的初始位置与大小。在这里,均使用了CW_USERDEFAULT,即指定使用默认初始位置和默认初始大小。

第8个参数是该窗口的父窗口句柄。通常,如果窗口之间存在“父子”关系,则子窗口通常出现在父窗口的上面。当创建某个应用程序中“最高级”的窗口时(通常即应用程序窗口),父窗口句柄参数应当置为NULL。

第9个参数是窗口菜单句柄。这里因为没有使用窗口菜单,所以其值设置为NULL。

第10个参数是应用程序实例句柄,它作为WinMain函数的参数由系统传入当前程序。

最后一个参数是创建参数,这里设置为NULL,可以用这个指针来访问以后想要引用的程序中的数据。

CreateWindow函数返回被创建窗口的窗口句柄。Windows中每一个窗口都有一个句柄,程序通过窗口句柄来引用窗口。许多 Windows函数都需要使用窗口句柄作为参数,这样,Windows才知道函数是针对哪一个窗口的。如果一个程序创建了许多窗口,则每一个窗口都拥有各自的句柄。窗口句柄是Windows程序所处理的最重要的句柄之一。