VC++学习笔记之创建窗口
1、设计窗口类。
一看到“设计”两个字,大家肯定就会想入非非。窗口的创建过程类似于汽车的制造过程。我们在生产一个型号的汽车之前,首先要对该型号的汽车进行设计,画出结构,设计零部件,起一个名字“奥迪A8”。完成设计后就可以按照这个型号生产汽车了。
当然,在我们设计窗口时,不像设计汽车那么复杂,因为Windows 已经为我们定义好了一个窗口的基本属性,我们只要进行属性设置就可以了。要达到做填空题的效果,只能通过结构体来完成,窗口的特征就是由WNDCLASS结构体来定义的。WNDCLASS结构
体的定义如下:
typedef struct _WNDCLASS{
UINT style; //设置窗口的样式
WNDPROC lpfnWndProc; //“lpfnWndProc”是一个函数指针,指向窗口过程函数(一个回调函数)。
/*在这里写一个小插曲,解释一下回调函数和窗口过程函数。回调函数的实现机制:它不是由该函数的实现方直接调用(只是提供),而是在特定的事件或条件发生时由“另外一方”调用的,用于对该事件或条件进行响应。(1)定义函数 (2)提供函数的一方在初始化的时候,将回调函数的函数指针注册给调用者(通常是操作系统)。 (3)当特定的事件或是条件发生时,调用者调用函数。 窗口过程函数被调用的过程:(1)将本函数地址赋值给“lpfnWndProc”成员变量。(2)调用“RegsiterClass(&wndclass)”注册窗口类,让系统获得我们编写的窗口过程函数的地址。(3)当应用程序接收到某一窗口的消息时,调用DispatchMessage(&msg)将消息回传给系统。然后系统调用窗口过程函数对消息进行处理。*/
int cbClsExtra; //设置类附加内存空间,被窗口类的所有窗口所共享。
int cbWndExtra; //设置窗口附加内存,用于存储窗口特有的数据。
HANDLE hInstance; //指定包含窗口过程的“主程序”的实例句柄
HICON hIcon; //指定窗口类的图标句柄。可以使用LoadIcon函数来加载一个图标资源,返回系统分配给该图标的句柄。
HCURSOR hCursor; //指定窗口类的光标句柄。可以调用LoadCursor函数来加载一个光标资源,返回系统分配该光标的句柄。
HBBUSH hbrBackground; //指定窗口类的背景画刷句柄。可以调用GetStockObject函数来得到系统的标准画刷。
LPCTSTR lpszMenuName; //指定菜单资源。
LPCTSSTR lpsz ClassName; //指定窗口类的名字,就像新设计了一型号的汽车,给该型号的汽车起个名字。
} WNDCLASS;
2、注册窗口类
就像设计完汽车后,国家有关部门审批通过之后,该种类型的汽车才可以生产。同样地,设计完窗口类(WNDCLASS)后,调用RegisterClass函数对其进行注册,然后才可以创建该类型的窗口。注册函数原型如下:
ATOM RegisterClass(CONST WNDCLASS *lpWndClass);
3、创建窗口
用CreateWindow函数产生这种类型的窗口。
4、显示及更新窗口
(1)调用ShowWindow函数来显示窗口。
BOOL ShowWindow(
HWND hWnd , //窗口句柄
int nCmdShow //窗口显示状态
);
(2)调用ShowWindow函数来刷新窗口
BOOL UpdateWindow(
HWND hWnd //创建好的窗体
);
朋友,如果您有什么真知灼见,可以加“新浪微博”/MSN哦,starrycheng@live.com,我们大家一起讨论,一起研究。
最后,帮忙加一分吧,想整个空间系统。