在学校一直做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);}
具体处理在前述的回调函数中。