当窗口类注册完毕之后,并不会有窗口显示出来,因为注册的过程仅仅是为创建窗口所做的准备工作。实际创建一个窗口是通过调用CreateWindow函数完成的。窗口类中已经预先定义了窗口的一般属性,而CreateWindow中的参数可以进一步指定一个窗口的更
具体的属性,在HelloWin.c程序中,是用下列调用CreateWindow函数的代码来创建窗 口的:
hwnd = CreateWindow ("HelloWin", // 窗口类名,要与注册时指定的相同
"我的窗口", // 窗口标题
WS_OVERLAPPEDWINDOW, // 窗口样式
CW_USEDEFAULT, // 窗口最初的 x 位置
CW_USEDEFAULT, // 窗口最初的 y 位置
480, // 窗口最初的 x 大小
320, // 窗口最初的 y 大小
NULL, // 父窗口句柄
NULL, // 窗口菜单句柄
hInstance, // 应用程序实例句柄
NULL) // 创建窗口的参数
CreateWindow函数的第一个参数是创建该窗口所使用的窗口类的名称,注意这个名称应与前面所注册的窗口类的名称一致。第三个参数为创建的窗口的风格,它们通常是一些预定义风格的“|”组合。其中,WS_OVERLAPPEDWINDOW表示创建一个层叠式窗口,有边框、标题栏、系统菜单、最大化和最小化按钮等。
CreateWindow函数后面的参数中,仍用到了该应用程序的实例句柄hInstance。如果窗口创建成功,返回值是新窗口的句柄,否则返回NULL。窗口创建后,并不会在屏幕上显示出来。要能真正把窗口显示在屏幕上,还得使用ShowWindow函数,其原型如下:
BOOL ShowWindow( HWND hWnd, int nCmdShow );
其中,参数hWnd指定要显示得窗口的句柄,nCmdShow表示窗口的显示方式,这里指定为从WinMain函数的nCmdShow所传递而来的值。
由于ShowWindow函数的执行优先级不高,所以当系统正忙着执行其他的任务时,窗口不会立即显示出来,此时,调用UpdateWindow函数以可以立即显示窗口。同时,它将会给窗口过程发出WM_PAINT消息。