由于上一章的文章中我没有向大家介绍清楚初试化的具体实现,造成很多的读者无法很好的理解,这是我的失误。本人现在补上,请大家原谅。
一个Windows API程序的初始化主要分为为四个部分。1、窗口类的定义2、窗口类的注册3、创建窗口实例4、显示窗口
①窗口类定义
在Windows应用程序中,窗口类定义了窗口的形式与功能。它的定义过程通过给窗口类数据结构WNDCLASS赋值来完成,这个数据结构包含窗口类的各个属性。窗口类的定义常用到以下几个函数,在这里一一介绍。
1、LoadIcon函数
LoadIcon函数的作用是在应用程序中加载一个窗口图标。它的原型为:
HICON LoadIcon
(
HINSTANCE hInstance, //图标资源所在的模块句柄;
//假如使用NULL,就会使用系统预定义的图标
LPCTSTR lpIconName //图标资源名或系统预定义的图标标识名
)
2、LoadCursor函数
LoadCursor函数作用是在应用程序中加载一个窗口光标。它的原型为:
HCURSOR LoadCursor
(
HINSTANCE hInstance,//光标资源所在的模块句柄;
//假如使用NULL,它就会使用系统预定义的光标
LPCTSTR lpCursorName//图标资源名或系统预定义的光标标识名
)
3、GetStockObject函数
应用程序通过调用GetStockObject函数来获取系统提供的背景刷,它的原型为:
HBRUSH GetStockObject(int nBrush);
//nBrush 为系统提供的背景刷标示名
②注册窗口类
Windows系统本身提供部分预定义的窗口类,我们也可以自己定义窗口类,窗口类必须先注册后使用。窗口类注册使用的函数是RegisterClass()实现。它的原型为:
RegisterClass(&wndclass);
//wndclass为窗口的类结构(前面第二篇文章已经介绍过了)
③创建窗口
窗口注册之后就要把它实例化,简单的说就是创建一个窗口的实例。它是由函数CreateWindow()实现,函数的原型为:
HWND CreateWindow
(
LPCTSTR lpszClassName,//窗口实例的类的名字
LPCTSTR lpszTitle, //窗口标题名
DWord dwStyle,//新创建的窗口的样式(后面将会具体介绍)
int x,//窗口左上角的横坐标
int y,//窗口左上角的纵坐标
int nWidth, //窗口的宽度
int nHeight, //窗口的高度
HWND hwndParent, //该窗口的父窗口的句柄
HMENU hMenu,//窗口主菜单句柄
HINSTANCE hInstance,//创建窗口的应用程序当前句柄
LPVOID lpParam //指向一个传递给窗口的参数值的指针
)
那么窗口的样式有哪些呢?
标识 说明
WS_BORDER 创建一般带边框的窗口
WS_CAPTION 创建一个带标题栏的窗口
WS_HSCROLL 创建一个带水平滚动条的窗口
WS_MAXIMIZEBOX 创建一个带最大化按钮的窗口
WS_MINIMIZEBOX 创建一个带最小化按钮的窗口
WS_OVERLAPPED 创建一个带边框和标题栏的窗口
WS_OVERLAPPEDWINDOW 创建一个带边框、标题栏、系统菜单及最大化、最小化按钮的窗口
WS_POPUP 创建一弹出式窗口
WS_POPUPWINDOW 创建一带边框和系统菜单的弹出式窗口
WS_SYSMENU 创建一带系统菜单的窗口
WS_VSCROLL 创建一带垂直滚动条的窗口
当然为了实现具有多种风格的窗口,WINAPI提供了“”来表示并(∪)的意思。例如我们要实现一个即具有垂直滚动条又具有水平滚动条的弹出式窗口时可以输入:WS_BSCOLLWS_VSCROLLWM_POPUP
④显示窗口
以上的操作均由函数实现,显示窗口当然也不例外。窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用ShowWindow函数在屏幕上显示窗口,其形式为:
BOOL ShowWindow(hwnd,nCmdShow)
//其中hwnd为窗口句柄,nCmdShow为窗口显示形式标识
nCmdShow共有六个可选值
标识 说明
SW_HIDE 隐藏窗口
SW_SHOWNORMAL 显示并激活窗口
SW_SHOWMINIMIZE 显示并最小化窗口
SW_SHOWMAXIMIZE 显示并最大化窗口
SW_SHOWNOACTIVE 显示但不激活窗口
SW_RESTORE 恢复窗口原来的位置及尺寸
在窗口显示之后,应用程序应使用UpdateWindow函数更新并绘制用户区,并发出WM_PAINT消息。它的形式为:
BOOL UpdataWindow(hwnd);
//hwnd为窗口句柄
(未完待续)