分类: 嵌入式
2010-04-26 17:14:54
1:SGUI基本框架
1.1 简单的程序
#include "sgui.h"
class sApp:public sApplication{
public:
sApp();
public:
virtual void init(int argc,char *argv[]);
};
void sApp::init(int argc,char *argv[])
{
userwindow dlg; //用户自定义的窗口类
dlg.sgui_window_create(); //第一个窗口,可不需要参数
}
1.2 用户程序的入口
用户程序的入口为应用程序类(sApplication)的init函数。
在sApplication派生类中,应继承其父类的void init(int argc,char *argv[])函数。此函数的参数意义与C中的main函数一致的。
可以从此函数的参数中接收启动应用程序时所传递的参数。
1.3 SGUI类层次关系
SGUI的根类是sObject,SGUI中大多数的类是从基类sObject派生出的.它定义SGUI类对象的基本行为.可能此类对用户程序没有多大的关联度.但在SGUI内部起着重要的作用。
2:SGUI基础类
2.1 sObject类
sObject类为SGUI体系的根类。它对用户程序没有多大联系。只有一个函数,所有的派生类都可以访问此函数。
void sgui_get_version();
读SGUI的版本号。可能通过读取此版本号来获取SGUI动态库的信息。
目前SGUI的版本号字符串中包括了开始日期,最后修改日期。及作者
如 “sgui ver1.0 \n (C) 2009-4 \n (M)
Sgui ver 1.0 : SGUI版本号
(C) 2009-4 : 开始日期
(M)
Ankine.he : 作者
2.2 sApplication类
sApplication类是应用程序类,这个类的实例的生命周期从应用程序开始到应用程序结束。它负责与GUI窗口管理器沟通信息,如果窗口管理器出现问题则此类将不进入init成员函数,用户程序需继承此类。并且规定类名为sApp,且此类必须在文件main.cpp和main.h当中。
sApplication类只有一个类成员函数init,对用户编程来说没有实际意义。
virtual void init(int argc,char *argv[]);
这个函数是在SGUI体系当中,用户程序的入口函数。用户类需要重新书写此函数。
2.3 sCwnd 类
sCwnd类是窗体的基类,它由sEvent派生出来。它提供消息类型解析,控件刷新,自刷新的虚函数。窗体相关控件类需要继承这些函数。
virtual V_EVENT_TYPE sgui_message_parse(struct g_message_function_param *message);
消息解析函数,这在制作控件的工作中需要使用此函数。一般的应用程序编制工作中不需要使用此函数。它负责解析传进本控件的事件,并由返回值送出所对应的消息类型。
virtual void sgui_control_refresh(g_window_draw_area *wdraw);
窗体控件刷新函数,只在控件编制工作中使用。控件刷新时调用是这个函数。所以控件必须含有此函数,并且做出正确响应。参数为刷新的区域。这个刷新消息会流经每一个控件,所以需要控件自己判断一下,刷新区域是不是自身所在的区域。如果是自身所在的区域,那则重绘本区域,否则就没有重绘这个必要了。
virtual void sgui_control_refresh_self();
自刷新函数。本函数将把控件自己的位置参数传递给刷新函数。应用程序可以调用控件的此函数来产生控件刷新。
int sgui_pos_compare(int _x,int _y,int _width,int _height,g_window_draw_area *area);
位置判断函数,在控件编制工作中使用。参数为控件的四个基本参数和一个刷新区域结构体指针。
返回值 1:为包含或相交关系 0:不相交
2.4 事件类型,消息类型
在SGUI体系里消息是产生事件所需的前提条件。消息是由外部条件或用户程序产生的,经由窗口,控件处理后产生出相应的事件,如果不是系统定义的消息,则产生的事件是未知的,用户只能从窗口事件响应函数当中判断消息来源来决定下一步动作。
SGUI中的事件类型
#define SGUI_EVENT_BUTTON_CLICKED 201
按钮按回车,或者点击,在ver1.0中没有使用到这个类型
#define SGUI_EVENT_EDIT_ENTER 202
编辑框中按回车键
#define SGUI_EVENT_ESC 203
#define SGUI_EVENT_EDIT_ESC SGUI_EVENT_ESC
在焦点控件上,按ESC键
#define SGUI_EVENT_LIST_SELECT 204
列表框控件的选择事件(在SGUI 1.0中未使用到)
#define SGUI_EVENT_NULL 205
无事件类型,有的控件对消息不理会时,将做出无事件类型判断
#define SGUI_EVENT_CLICKED 206
#define SGUI_EVENT_ENTER SGUI_EVENT_CLICKED
在控件上按回车,产生的事件
#define SGUI_EVENT_NEXT_CONTROL 207
下一个焦点控件的事件
#define SGUI_EVENT_PREV_CONTROL 208
上一个焦点控件的事件
#define SGUI_EVENT_GET_FOCUS 209
控件获取焦点时报告的事件,用户可以使用此事件来做先前判断
#define SGUI_EVENT_LOST_FOCUS 210
控件失去焦点时报告的事件
#define SGUI_EVENT_ON_CHAR 211
按键事件,一般不包括回车,上下左右键,这个具体得看控件的规则,SGUI不规定此规则。
#define SGUI_EVENT_KEY_UP 212
按键抬起事件,在SGUI 1.0中未使用到
#define SGUI_EVENT_KEY_STILL_DOWN 213
键一直按下事件,在SGUI 1.0中未使用到
#define SGUI_EVENT_WINDOW_CLOSE 214
关闭窗口事件
#define SGUI_EVENT_UNKNOW 215
未知事件类型
SGUI中的消息类型
#define SGUI_MESSAGE_WINDOW_CLOSE 100
窗口关闭消息
#define SGUI_MESSAGE_KEY_DOWN 101
键盘按键按下消息,这一般是重复键消息,也就是连续扫描后,非第一次按键按下。
#define SGUI_MESSAGE_KEY_UP 102
键盘按键抬起消息
#define SGUI_MESSAGE_KEY_PRESS 103
按键按键按下消息
#define SGUI_MESSAGE_TIMER 104
定时器消息,在SGUI1.0中未使用
#define SGUI_MESSAGE_WINDOW_PAINT 105
窗口重绘消息
#define SGUI_MESSAGE_GET_FOCUS 106
控件获取焦点的消息,只在SGUI内部使用。
#define SGUI_MESSAGE_LOST_FOCUS 107
控件失去焦点的消息,只在SGUI内部使用。
键 码
这里是SGUI体系里规定的F60键盘按键的内码及宏定义。
#define SGUI_KEY_ENTER 28 //回车键
#define SGUI_KEY_RIGHTSHIFT 54 //这个键未使用到
#define SGUI_KEY_LEFTSOFT 15 //左软键
#define SGUI_KEY_BACKSPACE 14 //也有叫右软键,在输入框里起删除作用
#define SGUI_KEY_LEFT 105 //向左健
#define SGUI_KEY_UP 103 //向上键
#define SGUI_KEY_RIGHT 106 //向右键
#define SGUI_KEY_ESC 1 //ESC键,在以后的版本中可能会当作播号键
#define SGUI_KEY_DOWN 108 //向下键
#define SGUI_KEY_1 2 //1键
#define SGUI_KEY_2 3 //2键
#define SGUI_KEY_3 4 //3键
#define SGUI_KEY_4 5 //4键
#define SGUI_KEY_5 6 //5
#define SGUI_KEY_6 7 //6
#define SGUI_KEY_7 8 //7
#define SGUI_KEY_8 9 //8
#define SGUI_KEY_9 10 //9
#define SGUI_KEY_KPPLUS 78 //*
#define SGUI_KEY_0 11 //0
#define SGUI_KEY_DOT 52 //#
#define SGUI_KEY_F1
#define SGUI_KEY_F2 60 //F2
#define SGUI_KEY_F3 61 //F3
#define SGUI_KEY_DESKTOP 73 //红色的开关机键,可用来切换到桌面,如果长按就被系统认为是关机键。短按则认为是桌面键,切换时由管理器自动切换,不需要用户程序做任何处理。