在学校一直做linux开发,工作做windows开发。今天看了一下最基本的windows API窗体编程。API是基于函数的,C语言。对这种风格的第一次接触,还是在linux上使用MiniGUI开发的时候。
在这个过程 中,分为两部分,一是结构体,二是函数(可能还有一些宏定义)。对于事件的处理都是通过向窗体注册一个回调函数,回调函数有四个参数,分别为窗体资源标识符,事件ID,以及两个事件参数。
结构体:
typedef struct _WNDCLASS { UINT style;// 窗口类型 WNDPROC lpfnWndProc;//窗口处理函数 int cbClsExtra;//窗口扩展 int cbWndExtra;//窗口实例扩展 HINSTANCE hInstance;//实例句柄 HICON hIcon;//窗口的最小化图标 HCURSOR hCursor;//窗口鼠标光标 HBRUSH hbrBackground;//窗口背景色 LPCTSTR lpszMenuName;//窗口菜单 LPCTSTR lpszClassName;// 窗口类名 } WNDCLASS, *LPWNDCLASS;其包含了对窗体的配置参数(类型,图标,菜单等等),其中包括了需要注册的回调函数。
回调函数完成对事件的处理,其一般内容为:
switch(TYPE) {
case TYPE_1:
do_1(...);
break;
case TYPE_2:
do_2(...);
break;
...
...
...
default:
return define_do(_1,_2,_3,_4);
return 0;
}
在C/C++中程序入口为main(int argc, char* argv[]),而在此为WinMain,其有四个参数,分别为APP当前实例,APP先前的实例,命令行,和窗体的显示状态。
一个窗体的创建分为四个步骤:
1.设计窗体
2.注册窗体
3.生成窗体
4.显示及更新窗体
第一步,对WNDCLASS进行参数配置,第二调用RegisterClass函数注册,第三调用CreateWindow生成,最后调用ShowWindow显示,调用UpdateWindow更新窗体。在这应该注意RegisterClass,每产生不同的窗体必须重新注册。
窗体的绘制完成后则需要事件进行捕捉。
一般形式为:
MSG msg;
while(GetMessage(&msg,NULL,0,0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
具体处理在前述的回调函数中。