SGUI编程指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SGUI 1.0
编程指南
1SGUI基本框架 (3)
2SGUI基础类 (4)
2.1 sObject类 (4)
2.2 sApplication类 (4)
2.3sCwnd 类 (5)
2.4 事件类型,消息类型 (5)
2.5 键码 (7)
3消息与消息处理过程 (8)
3.1 消息流程 (8)
3.2 消息响应 (8)
3.3 用户自定义消息 (10)
4窗口类sWindow (11)
4.1窗口类的入口函数 (11)
4.2窗口的组成及坐标系 (11)
4.3窗口的控件 (12)
4.4窗口的属性 (12)
4.6创建用户自己的窗口类 (15)
5 矢量图形类sGdi (18)
6字体类sFont (20)
7 图片类sPicture (21)
8 静态文本控件sStatic (22)
9:选择框控件sCheckbox (24)
10图像框控件sImage (26)
11图像列表sImagelist (27)
12编辑框控件sEdit (28)
13 列表框sListctrl (30)
14 进度条、滚动条sProgressbar (34)
15 消息提示框 (35)
16 ASCII符号选择框sSymbol (36)
17 文件类sFile (36)
18 INI文件类sIniFile (38)
19 DBF表操作类sDBF (40)
20 串口设备类 sSerial ............................................................................................................... 42 21 扩展条码扫描模块................................................................................................................. 44 22 扩展无线模块......................................................................................................................... 44 23 F60串口设备 . (45)
1 SGUI 基本框架
1.1
简单的程序
1.2 用户程序的入口
用户程序的入口为应用程序类(sApplication)的init 函数。
在sApplication 派生类中,应继承其父类的void init(int argc,char *argv[])函数。
此函数的参数意义与C 中的main 函数一致的。
可以从此函数的参数中接收启动应用程序时所传递的参数。
1.3 SGUI 类层次关系
SGUI 的根类是sObject,SGUI 中大多数的类是从基类sObject
派生出的.它定义
SGUI类对象的基本行为.可能此类对用户程序没有多大的关联度.但在SGUI内部
起着重要的作用。
下面是SGUI类的层次关系图
2SGUI基础类
2.1sObject类
sObject类为SGUI体系的根类。
它对用户程序没有多大联系。
只有一个函数,所有的派生类都可以访问此函数。
void sgui_get_version();
读SGUI的版本号。
2.2sApplication类
sApplication类是应用程序类,这个类的实例的生命周期从应用程序开始
到应用程序结束。
它负责与GUI窗口管理器沟通信息,如果窗口管理器
出现问题则此类将不进入init成员函数,用户程序需继承此类。
并且规
定类名为sApp,且此类必须在文件main.cpp和main.h当中。
sApplication类只有一个类成员函数init,对用户编程来说有实际意义。
virtual void init(int argc,char *argv[]);
这个函数是在SGUI体系当中,用户程序的入口函数。
用户类需要重新书写此函数。
2.3sCwnd 类
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体系里消息是产生事件所需的前提条件。
消息是由外部条件或用户程序产生的,经由窗口,控件处理后产生出相应的事件,如果不是系统定义的消息,则产生的事件是未知的,用户只能从窗口事件响应函数当中判断消息来源来决定下一步动作。
#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
未知事件类型
#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内部使用。
2.5键码
这里是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 59 //F1
#define SGUI_KEY_F2 60 //F2
#define SGUI_KEY_F3 61 //F3
#define SGUI_KEY_DESKTOP 73 //红色的开关机键,可用来切换到桌面,如果长按就被系统认为是关机键。
短按则认为是桌面键,切换时由管理器自动切换,不需要用户程序做任何处理。
3消息与消息处理过程
3.1消息流程
在SGUI里,系统消息流是从最底层的应用程序消息中获取,然后转发于当前的窗口,由窗口转交当前控件而产生一种事件交由用户程序,用户程序处理完后,消息继续回到窗口,由窗口做一些默认的工作。
如果用户程序不想让消息回流到窗口,则可以调用sgui_delete_current_message。
消息分为系统消息与用户自定义消息。
用户自定义消息一般用于模拟系统消息和通知消息。
比如,当进入窗口时,很想第一时间在窗口中做一件事情,这个时候窗口又还有完全绘图,要等绘图完毕后才能进入消息流。
这个时候可以发一条消息通知窗口在绘图完毕后处理这个消息。
3.2消息响应
在SGUI中响应消息有两种方式
一种是在初始化控件时针对每个控件的事件注册一个响应函数
用户程序需要处理控件的消息事件时,需要在创建控件和注册控件后,注册一个该控件的特定事件的用户响应函数。
第二种方法是在窗口的事件处理函数中处理所有的事件,这种方法适合控件少的窗口,如果控件多最好还是采用第一种方法。
第一种方法对于程序来说会很简洁。
使用第二种方法有有一个好处就是可以在一个函数里做全部判断。
这个函数是窗口类的一个虚函数,用户窗口类中需要继承它。
函数原型为:
virtual void sgui_window_event(g_event_function_param *Event_Message);
3.3用户自定义消息
在SGUI 1.0 中,用户自定义的消息需在sgui_window_event函数中进行判断处理。
4 窗口类 sWindow
4.1 窗口类的入口函数
窗口类是SGUI 当中很重要的一个类,也可以叫对话框类。
但SGUI1.0当中没有了对
话框的概念。
要使窗口类正常的工作,必须在绘制窗体之前调用创建函数。
如果没有特别的扩展函数,一般就是直接调用创建函数。
SGUI1.0中窗口都是模态的。
也就是一定要退出本窗口才能回到父窗口。
窗口创建函数的原型:
void sgui_window_create(PV_SGUI parent_window=NULL);
如果是应用程序的主窗口,则参数可为NULL ,但如果不是主窗口,参数一定要是this.否则可能会出现回到父窗口时父窗口是乱套的。
在实际的工作当中,可能要往窗口类传递一些参数,或者在sgui_window_create 函数之前干点别的事情的时候,可以在用户窗口类加上其它的函数,但是必须保证函数必须调用sgui_window_create 函数,而且必须传递所需的参数。
4.2 窗口的组成及坐标系
240(宽) ×
320 (长)像素。
用户区域的大小为 = 320 – 20 – 20 – 20 = 260
规定,左上角为原点(0,0),以像素为单位。
窗口,控件都是从左到右的方向绘图的。
4.3窗口的控件
控件是需要注册到窗口当中的,否则会显示不出来,或者不受窗口的消息控制。
窗口的控件必须在sgui_window_init函数之前或者这个函数退出之前完成控件的创建注册,及初始化。
4.4窗口的属性
窗口的属性设置必须在窗体的绘制之前设置,否则将不生效。
4.4.1窗口的位置属性
g_window_postion_size pos_property;
struct g_window_postion_size{
unsigned short x; //X坐标
unsigned short y; //Y坐标
unsigned short width; //宽
unsigned short height; //高
V_COLORREF w_grounding; //背景色,默认为RGB(200,205,154)
short bolds; //窗体的边框宽度,目前是固定的,为1
short title_height; //标题栏高度,如果有标题栏为20,否则为0 };
有无标题栏取决于标题栏的标题内容,如果无内容,则无标题栏。
4.4.2窗体底图
char w_back_picture[128];
如果w_back_picture字符串数组的字符串长度为0,则不绘制底图,按底色绘图。
如果所指向的图片不存在,则不按底色绘图也不按底图绘图。
1.1.1标题栏图标
char w_icon_picture[128];
标题栏图标必须在有标题栏的前提下才会绘制图标。
1.1.2窗体标题字体属性
sFont w_font;
标题栏的字体属性。
对于标题栏字体一般只能设置一下颜色。
4.4.5 窗体颜色属性
V_COLORREF w_bolds_rgb;
窗体边框颜色。
默认为宏SGUI_DEFAULT_WINDOW_BOLD_COLOR
1.1.1提示栏
提示栏是窗口的一部份,它固定在最下边,高为20个像素,它分为三项,左中右,分别对应键盘的最上面的一排的三个键。
unsigned char w_tips_bar;
是否有提示栏。
如果w_tips_bar为真则有提示栏,反之没有提示栏。
V_COLORREF w_tips_bar_back_color;
提示栏的底色,默认为蓝色
V_COLORREF w_tips_bar_font_color;
提示栏的字体色,默认为白色。
1.2窗口函数
4.5.1控件注册函数
bool sgui_control_register(PV_SGUI pcontrol,int id,V_TAB_ID tab_id,\
char *tips_ left, char *tips_mid,char *tips_ right);
窗口注册控件的函数。
Pcontrol :控件的指针。
Id :控件的ID号,ID号在SGUI里面规定从SGUI_USER_CONTROL_ID基础号加1算起。
ID号必须在本窗口当中唯一。
tab_id :控件的tab id号,在SGUI里面tab id 是移动控件的重要依据。
SGUI规定控件的tab id从1开始,如果为负值,则表示此控件将不获得焦点。
tab id 在本窗口中
必须唯一。
tips_ right:提示栏的第一项,
tips_mid :提示栏的第二项
tips_ left:提示栏的第三项
4.5.2 事件注册函数
bool sgui_event_register(sgui_event_function event_function , int id , \
V_EVENT_TYPE event_type);
控件的事件注册函数。
Event_function :响应的函数,函数必须是类的成员函数。
Id :控件的ID号
Event_type :响应的事件类型
4.5.3 关闭窗口
void sgui_window_close();
调用此函数,只是发送了一个关闭消息。
在响应本消息之前,会先完成其它之前的消息。
然后再执行关闭消息。
4.5.4 用户程序初始化函数
virtual bool sgui_window_init();
这是窗口类的一个纯虚函数,所以派生出的类必须实现这个函数。
这个函数返回true将绘制窗体并进入到消息循环当中,否则退出窗口。
4.5.5 绘制窗口函数
virtual void sgui_window_ondraw(bool refresh_window_back=true);
绘制窗口函数可以被用户类继承下来,重新书写绘制函数,这只是针对高级用户修改窗体的画法的时候才能使用。
一般不使用此函数。
1.2.1窗口事件响应函数
virtual void sgui_window_event(g_event_function_param *Event_Message);
用户可以继承此虚函数。
所有的消息都会经过此函数,所以它可以取代控件事件响应函数。
如果在控件的事件响应函数中把消息删除了,就不会进入到此函数。
1.2.2窗口销毁
virtual void sgui_window_destory();
这个函数是窗口关闭时响应的最后一个函数,如果用户需要在最后想做点什么事情的话,可以在此函数中添加。
1.2.3创建窗口函数
void sgui_window_create(PV_SGUI parent_window=NULL);
这是窗口的标准入口函数,parent_window是父窗口的指针。
如果是从sApp类的init函数中创建的窗口就不需要父窗口的指针了。
1.2.4设置焦点控件函数
bool sgui_set_focus(V_TAB_ID tabid);
设置焦点控件。
Tabid的值就根据创建和注册控件的时候给定的tabid值。
4.5.10 获得焦点控件TAB值
V_TAB_ID sgui_get_focus_tabid();
获取当前的焦点控件的tab id值。
如果有sgui_window_event函数中处理消息的时候,这个函数用到此函数的几率要大。
4.5.11设置提示栏
virtual void sgui_tips_draw(unsigned int tips_id,char *tips_mess);
绘制提示栏,用户如果想更改提示栏的样式,或者用其它的方法绘制的话,可以重载此函数。
tips_id :标题栏的位置序号,从左到右的方向(0到2)
tips_mess :标题栏显示的内容
4.5.12 发送消息函数
bool sgui_send_message(g_message_function_param message,
PV_SGUI hwnd=NULL);
message :消息类型,可以是系统的消息类型,也可以是用户自定义的消息。
用户自定义的消息在SGUI中,从SGUI_MESSAGE_USER_ID+1开始,
是留给用户自定义消息的空间。
g_message_function_param结构体的定义
struct g_message_function_param{
V_MESSAGE_TYPE message_type; //消息类型
unsigned long lparam; //消息参数1
unsigned short wparam; //消息参数2
};
Hwnd :这是一个预留参数,在SGUI 1.0当中并未使用。
4.5.13删除消息函数
void sgui_delete_this_message();
在SGUI体系的消息是由窗口发送到焦点控件,然后再回到窗口的事件处理函数,最后再回到窗口的控件调度函数。
这个期间,用户可以在程序当中,使用此函数,截断消息的下一级发送。
4.5.14 删除所有的按键消息
void sgui_delete_all_key_message();
在SGUI中,按键的消息是保存在缓冲当中。
再一个一个的发往当前应用程序。
有时候在处理数据的时间较长,按键缓冲当中的有很多的按键消息。
这个时候又不想等数据处理完成后有一堆乱的按键即刻就响应了,可以使用此函数对按键缓冲进行清除。
4.6创建用户自己的窗口类
用户每创建一个窗口(或者对话框),都需要从sWindow派生一个窗口类。
并提倡按下面的格式进行书写
1:在每个文件开头把公司中文名字写上去,这样可以避免文件在编辑器不能正确识别文件的编码格式。
一旦出现不能正常识别文件编码
2:sgui_window_create函数是sWidnow类的成员函数,子类可以访问此函数,如果扩展入口函数,那么扩展的入口函数需要代替外部类调用sgui_window_create函数。
5 矢量图形类sGdi
5.1 坐标系
F60中的液晶点阵是(240 ×320)
(0,0)
5.2画点
void sgui_set_pixel(int x,int y,V_COLORREF color);
x,y :为点阵坐标。
color :RGB颜色值
5.3 画线
void sgui_draw_hline(int x,int y,int len,V_COLORREF color);
// 画横线
void sgui_draw_vline(int x,int y,int len,V_COLORREF color);
// 画竖线
x,y :为点阵坐标
len :为线的长度或高度
color:RGB画线色
5.4矩形
void sgui_draw_rect(int x, int y,int width,int height,V_COLORREF cor,int dots=false);
// 画矩形框
x,y :点阵坐标
width,height :矩形的宽度与高度
cor :绘图颜色
dots :虚线,如为false就是实线。
虚线的线与线之间的间隔取决于dots大小。
5.5区域填充
void sgui_draw_fill_rect(int x, int y,int width,int height,V_COLORREF cor,V_COLORREF fillcor,int bolds=1);
填充矩形区域
x,y :区域起点点阵坐标
width,height :区域的宽度与高度
cor :区域边框的RGB色
fillcor :区域填充的RGB色
bolds :边框宽度,目前只有为1时起作用
5.6画圆
void sgui_draw_circle(int cx,int cy,int r,V_COLORREF cor);
cx,cy :圆点坐标
r :半径
cor :画圆RGB色
5.7显字
void sgui_draw_character(int cx,int cy,sFont *font,V_COLORREF color);
cx,cy :字显示的左上角坐标
font :字体类,显字的时候是从字体类中取出数据,所以在显示的时候需要给字体类赋数据。
color :显字的颜色
5.8显字符串
void sgui_draw_text(int cx,int cy,int area_width,int area_height,char *dis_str,sFont *font);
cx,cy :字符串显示的起始位置
area_width :显示区域宽度
area_heigth :显示区域高度
dis_str :显示字符串
font :字体类
5.9 画图
在SGUI 1.0中,支持三种绘图模式,两种图形格式。
一种PNG格式,由于绘PNG图的算法上时间复杂度较大,延伸出了一种立即绘图(SGUI_PICTURE_PNG_LIMITED),一种是转BMP格式的绘图(SGUI_PICTURE_PNG_TO_BITBMP)。
立即绘图在速度上比转换成BMP要慢一点。
但转换成BMP格式要消耗一定的内存空间,而且这块内存空间将长期占用。
前面这两种模式要么变费时,要么就费空间。
只适合小图片,不适合大尺寸的图片刷新。
所以在SGUI 1.0中增加一种BMP555格式的图片格式(SGUI_PICTURE_555BMP),当然用户也可以自己增加图片格式。
BMP555是BMP格式当中的一种,它是16位RGB色,其中RGB分值为R5,G5,B5。
它可由普通的BMP图片转换成成。
用GIMP图形处理软件可以很容易转换而成。
绘制BMP555图片时,速度快,内存消耗低。
适合大尺寸的图片刷新。
void sgui_draw_picture(int cx,int cy,int area_width,int area_height,
sPicture *picture,bool draw_mode=true,int base_x=0,int base_y=0);
cx,cy :绘制图片左上角的坐标
area_width,area_height :图片宽度,高度
picture :图像类
draw_mode :绘图模式,true时为全尺寸绘图,false为区域绘图
区域绘图时需指字起始点,即base_x,base_y Base_x,base_y :区域绘图时的起始点
5.10块操作
块操作指的是,对屏幕的显示内存区域进行操作。
块操作在SGUI 1.0中,有块读,块写两种。
unsigned char * sgui_copy_buffer(int x,int y,int width,int height);
读指定的显示区域内存,返回一个内存地址。
此内存区域大小则为width * height * 2.
void sgui_set_buffer(int x,int y,int width,int height,unsigned char *pbuffer);
写指定的显示区域内存
6字体类sFont
SGUI 1.0内部使用的编码是unicode编码,外部编辑器规定GBK编码。
所以在编辑源程序的时候一定要先设定好源文件的编码格式。
在codeblock编辑器中,一定要选择WINDWOS936格式。
6.1 设置字体大小
SGUI 1.0的默认字体大小为16。
也是SGUI 1.0中的最小的字大小。
设置字体大小有两种方法,一种是在初始化的时候就对字体进行设置。
即设置字体大小变量unsigned int char_pixel_height;
第二种为使用当中改变字体大小,使用sgui_set_font_size函数进行设置
void sgui_set_font_size(unsigned int _char_pixel_height);
6.2 设置前景色,背景色
V_TYPE_FB_BUFF area_background_color;
V_TYPE_FB_BUFF font_foreground_color;
SGUI 1.0 的字体类中默认是没有背景色,即背景色取屏幕上原有的颜色。
如果是在窗口中,则背景色取窗口的底色或底图。
默认的前景色,也就是字体色为SGUI_DEFAULT_CHAR_FOREGROUND_COLOR。
6.3 设置行间距
默认行间距为0。
unsigned short line_space;
以像素点为单位。
6.4 计算字符串完整显示所占用的像素点
预先计算字符串完整显示需要多少个像素点。
int sgui_get_string_pixel_width(char *buffer);
7 图片类sPicture
7.1 绘图样式
如果图片类型为PNG系列时,可以支持灰度样式及原始样式。
默认为SGUI_PNG_DRAW_MODE_REF
其宏定义为
SGUI_PNG_DRAW_MODE_REF:原始样式绘图样式
SGUI_PNG_DRAW_MODE_GRAY:灰度绘图样式
unsigned char draw_style;
7.2 图片类型
图片类型在SGUI 1.0中有三种,上面有章节描述这三种类型的来源。
一种是立即PNG立即绘图,即SGUI_PICTURE_PNG_LIMITED
一种是PNG转BMP绘图,即SGUI_PICTURE_PNG_TO_BITBMP
一种是BMP555类型的绘图,即SGUI_PICTURE_555BMP
默认是SGUI_PICTURE_PNG_TO_BITBMP
unsigned char picture_draw_mode;
7.3图片透明度
透明度取决于图片的参数,这需要用户自己判断透明度,范围是0到255,
默认为0。
如果透明度不对,可能出现图片有花纹。
其控制变量是
unsigned char transparence;
7.4图片背景色
图片的背景色,是针对有透明度的PNG图片如,默认为RGB(195,189,198),对BMP
图片则背景色不起作用。
V_TYPE_FB_BUFF background;
7.5打开图片
图片文件指针,它只是一个指针,没有实际内存空间,所以在调用的时候只能赋数
组地址,而不能给它赋字符串。
char *picture_filename;
打开图片文件,返回为0则打开失败,否则成功。
在使用此类的时候,必须先调用此函数来打开图片。
如果不是用来书写控件,不会
深层次用到此类。
int sgui_picture_open();
7.6获取图片大小
图片打开成功能。
Picture_width,picture_height就是两个正确的图片大小值。
unsigned short picture_width,picture_height;
8 静态文本控件sStatic
8.1 消息与事件
静态文件控件响应按键事件时。
如果是键按下时,对上下键则产生SGUI_EVENT_NEXT_CONTROL事件,对左右键则产生SGUI_EVENT_PREV_CONTROL事件,对回车键产生SGUI_EVENT_CLICKED事件,对其它的按键产生SGUI_EVENT_ON_CHAR事件。
如果是键抬起时,则产生SGUI_EVENT_KEY_UP事件。
如果是键一直按下,则产生SGUI_EVENT_KEY_STILL_DOWN事件。
如果不符合上述情况则产生一个SGUI_EVENT_UNKNOW事件
8.2创建静态文本框
virtual void sgui_static_create(int _x,int _y,int _width,int _height,PV_SGUI _window,int _control_id,int _tab_id,char *_caption=NULL);
_x , _y , _width , _height :控件的位置参数,左上角坐标点,宽度,高度。
这几个参数也可以随时更改,不过得用户自己算
好绝对位置。
_window :这是个很重要的参数,为控件所属的窗口。
_control_id :控件的ID号,在窗口当中必须是唯一的
_tab_id :控件的TAB ID号,如果大于0则必须是唯一的。
_caption :文本显示的内容。
8.3设置显示字符串
void sgui_set_caption(char *_caption,bool update=true);
方法之一,通过此函数设置时,控件本身会为显示字符串再次分配内存空间。
_caption :字符串或字符串指针
Update :是否立即更新显示。
默认是立即更新。
void sgui_set_caption_by_pointer(char * _caption,bool update=true);
方法之一,通过此函数设置时,控件不会为显示字符串再次分配内存空间。
而是从指进来的指针当中获取字符串,此时必须保证这个字符串指针的生命周期比此控件还长。
_caption :字符串指针
Update :是否立即更新显示。
默认是立即更新。
8.4获得显示字符串
void sgui_get_caption(char *_caption);
_caption :接收字符串的指针。
必须保证此指针所指向的内存空间大小要大于本控件的显示字符串的长度。
否则会出现内存溢出所引起的一些意外错误。
8.5获得字符串长度
unsigned short sgui_get_caption_length();
如果用户想用此长度来申请空间再获得显示字符串,则建议在申请的时候,在此长度的基础上加大一个字节。
因为字符串后面还有一个结围符需要占用空间。
8.6设置背景色,字体色,虚边框色,选择时的背景色
V_COLORREF background_color; 背景色,默认是没有背景色,则取窗口的底图
或者窗口的背景色。
sFont font;静态文本的字体属性。
见字体类。
V_COLORREF focus_frame_color;虚边框色,只有获取焦点时才显示虚边框。
bool focus_have_background;设置获取焦点时,是否需要有背景色。
默认没有,
如果设置为true的话,则当控件获取焦
点的时候,会呈现在出被选择的阴影,
此时获取焦点的背景色为控件背景色
取反。
8.7扩展用户自己的静态文本控件
如果用户需要扩展自己的静态文本控件,则可以重载下面的函数来达到自己的想要的功能。
virtual void sgui_static_create(int _x,int _y,int _width,int _height,PV_SGUI _window,int _control_id,int _tab_id,char *_caption=NULL);
virtual void sgui_control_refresh(g_window_draw_area *wdraw);
virtual V_EVENT_TYPE sgui_message_parse(struct g_message_function_param *message);
virtual void sgui_control_ondraw(g_window_draw_area *wdraw);
virtual void sgui_control_refresh_self();
9:选择框控件sCheckbox
9.1 消息与事件
静态文件控件响应按键事件时。
如果是键按下时,对上下键则产生SGUI_EVENT_NEXT_CONTROL事件,对左右键则产生SGUI_EVENT_PREV_CONTROL事件,对回车键产生SGUI_EVENT_CLICKED事件,对其它的按键产生SGUI_EVENT_ON_CHAR事件。
如果是键抬起时,则产生SGUI_EVENT_KEY_UP事件。
如果是键一直按下,则产生SGUI_EVENT_KEY_STILL_DOWN事件。
如果不符合上述情况则产生一个SGUI_EVENT_UNKNOW事件
9.2 创建选择框控件
virtual void sgui_checkbox_create(int _x,int _y,int _width,int _height,PV_SGUI _window,int _control_id,int _tab_id,char *_caption=NULL);
_x , _y , _width , _height :控件的位置参数,左上角坐标点,宽度,高度。
这几个参数也可以随时更改,不过得用户自己算
好绝对位置。
_window :这是个很重要的参数,为控件所属的窗口。
_control_id :控件的ID号,在窗口当中必须是唯一的
_tab_id :控件的TAB ID号,如果大于0则必须是唯一的。
_caption :文本显示的内容。
9.3设置显示字符串
void sgui_set_caption(char *_caption,bool update=true);
方法之一,通过此函数设置时,控件本身会为显示字符串再次分配内存空间。
_caption :字符串或字符串指针
Update :是否立即更新显示。
默认是立即更新。
void sgui_set_caption_by_pointer(char * _caption,bool update=true);
方法之一,通过此函数设置时,控件不会为显示字符串再次分配内存空间。
而是从指进来的指针当中获取字符串,此时必须保证这个字符串指针的生命周期比此控件还长。
_caption :字符串指针
Update :是否立即更新显示。
默认是立即更新。
9.4获得显示字符串
void sgui_get_caption(char *_caption);
_caption :接收字符串的指针。
必须保证此指针所指向的内存空间大小要大于本控件的
显示字符串的长度。
否则会出现内存溢出所引起的一些意外错误。
9.5获得字符串长度
unsigned short sgui_get_caption_length();
如果用户想用此长度来申请空间再获得显示字符串,则建议在申请的时候,在此长度的基础上加大一个字节。
因为字符串后面还有一个结围符需要占用空间。
9.6设置背景色,字体色,虚边框色,选择时的背景色
V_COLORREF background_color; 背景色,默认是没有背景色,则取窗口的底图
或者窗口的背景色。
sFont font;静态文本的字体属性。
见字体类。
V_COLORREF focus_frame_color;虚边框色,只有获取焦点时才显示虚边框。
bool focus_have_background;设置获取焦点时,是否需要有背景色。
默认没有,
如果设置为true的话,则当控件获取焦
点的时候,会呈现在出被选择的阴影,
此时获取焦点的背景色为控件背景色
取反。
9.7设置选择状态
void sgui_set_check(bool _checked,bool update=true);
_checked:true 或者false
update :是否立即刷新,true为立即刷新,false为等待有刷新的时候刷新。
9.8获取选择框状态
只要读取其成员变量bool checked即可。
其中true 为选择,false为未选择。
9.9控件勾选
控件本身并没有设定哪个键是使控件选择还是取消选择。
只有通过用户程序响应按键来决定。
10图像框控件sImage
10.1消息与事件
静态文件控件响应按键事件时。
如果是键按下时,对上下键则产生SGUI_EVENT_NEXT_CONTROL事件,对左右键则产生SGUI_EVENT_PREV_CONTROL事件,对回车键产生SGUI_EVENT_CLICKED事件,对其它的按键产生SGUI_EVENT_ON_CHAR事件。
如果是键抬起时,则产生SGUI_EVENT_KEY_UP事件。
如果是键一直按下,则产生SGUI_EVENT_KEY_STILL_DOWN事件。
如果不符合上述情况则产生一个SGUI_EVENT_UNKNOW事件
10.2图像框样式
图像框在SGUI 1.0中有五种样式
分别为仅图片和提示符在图片下边,上边,左边,右边,五种。
#define SGUI_IMAGE_STYLE_ONLY_PICTURE 1
#define SGUI_IMAGE_STYLE_BOTTOM_TIPS 2
#define SGUI_IMAGE_STYLE_TOP_TIPS 3
#define SGUI_IMAGE_STYLE_LEFT_TIPS 4
#define SGUI_IMAGE_STYLE_RIGHT_TIPS 5
unsigned short style;默认为1.
10.3创建图像框
void sgui_image_create(int _x,int _y,int _width,int _height,PV_SGUI _window,int _control_id,int _tab_id,const char *filename);
_x , _y , _width , _height :控件的位置参数,左上角坐标点,宽度,高度。
这几个参数也可以随时更改,不过得用户自己算
好绝对位置。
_window :这是个很重要的参数,为控件所属的窗口。
_control_id :控件的ID号,在窗口当中必须是唯一的
_tab_id :控件的TAB ID号,如果大于0则必须是唯一的。
filename:图片文件的路径。
可为字符串常量,或者字符串指针。
创建的时候可以为空。
10.4 设置图像框的图片文件
bool sgui_set_picture_file(const char *filename);
filename:图片文件的路径。
可为字符串常量,或者字符串指针。
10.5 设定绘图类型
设置图片的类型。
sPicture picture;
参看sPicture类中关于图片类型的概述。