/*本窗口的位置、状态、风格以及窗口标题等*/

U32 status; //本窗口状态

U16 x; //本窗口左上角x坐标

U16 v; //本窗口左上角Y坐标

U16 width; //本窗口的宽度

U16 hight; //本窗口的高度

char *caption} //本窗口标题

U32 style; //本窗口风格

/*指向本窗口私有数据结构的指针*/

void *etrl_str; //指向本窗口的私有数据结构

}ASIX_WINDOW;

实际上,不同的控件拥有不同的功能和结构,所以它们的操作是不同的。为了拥有统一的操作函数接口,为每一个不同的窗口或控件定义了相应的窗口类,窗口类实际上是每种控件的模版,这个模版定义了与该控件相关的内容。当应用程序员调用CreatWindow函数创建某类控件时,CreatWindow查找该类控件的窗口类,并根据窗口类中的定义,调用与该控件相关的创建函数,进行实际的创建工作。然后CreatWindow填写相应的数据结构,描述该控件

类的实例,并将其链接到系统窗口链表中去,以便后续的管理。利用窗口类描述不同控件设计的同时,可以将不同控件的开发独立于系统构架的实现,使得控件的开发可以独立进行。使用独立窗口类来描述每个控件的另一个好处是可以非常方便的对ASIX Window进行裁减。下面给出窗口类数据结构的定义。

typedef struct window_class

{ U8 wndclass_id; //窗口类的ID号

//CreateWindow()调用本函数执行控件的具体创建

STATUS (。create)(char‘caption,U32 style,U16 x,

U16 Y,U16 width,U16 hight,U32 wndid,U32 menH,void*

*etrl_str,void*exdata);

//DestroyWindow()调用本函数执行控件的具体删除

STATUS (*destroy)(void*ctrl_str);

//DefWindowProc()调用本函数进行消息处理

STATUS (。msg_proe)(U32 win_id,U16 asix_msg·U32

lparam.void*data,U16 wparam.void*reserved);

//GetMessage()调用本函数进行底层消息的翻译与转换

STATUS (*msg_trans)(void*ctrl_str,U16 msg_type,

U32 areald.P_U16 data,U32 size,PMSG trans_msg);

//RePaintWindow()调用本函数重绘本窗口类控件

STATUS (*repaint)(void*ctrl_str,U32 Iparam);

//SetWindowText()调用本函数设置本窗口类控件的标题

STATUS (*caption)(void*ctrl_str,char*caption,void* exdata);

WNDCLASS;

图2所示是系统中窗口链表的结构,系统还维护了一张任务链表,每个任务控制块(TCB)中都保留了指向本任务窗口链表的首指针。

基于uITRON 3.0的嵌入式GUI系统设计概述