通用控件
控件操作接口
控件系统初始化
TWidget *TwAppInit (void);
功能:应用程序所创建的控件关系可以看做是一个树型结构,所有的控件都会有父控件,此函数返回程序所有控件的祖控件。
参数:无
返回值:root窗口
注解:根窗口的子控件必须是窗口控件
控件系统的事件循环
void TTaskLoopOnce(void);
功能:在应用程序创建任务和做好其他初始化工作之后,必须进入一个循环处理过程。在这个过程中,应用程序等待各种事件来触发预先设定好的任务运行,在没有事件发生时,用户进程是休眠的,不占用 CPU。任务被触发后,也是在事件循环过程中执行的。
参数:无
返回值:无
示例:
while(1)TTaskLoopOnce(0);
刷新界面显示
void TwUpdateShow(void);
功能:当调用某些函数导致控件外观发生变化时,界面并不会立即更新,而是等到一轮事件都处理完毕后才一起自动刷新,这样可以提高系统的性能。
用户如果想要主动刷新界面则可以调用 TwUpdateShow() 来立即更新界面显示。
参数:
无
返回值:
无
创建控件
TWidget *TwCreate(T_ID type, TWidget *parent, int x, int y, int w, int h, char *style, int flags);
功能:用 TWidget 来表示控件的结构,函数内部是调用 TObjectCreate()函数来创建控件对象。
参数:
参数 | 说明 |
---|---|
type | 控件类型,如创建窗口控件用 TW_WINDOW |
parent | 父控件 |
x、y | 控件相对于父控件的坐标 |
w、h | 控件的大小 |
style | 控件的风格名 |
flags | 控件的标记 |
返回值:控件对象指针
示例:
TWidget *mainWin = TObjectGetFromName("mainWin");
TWidget *button = TwCreate(TW_BUTTON, mainWin, 100, 100, 113, 53, NULL, 0);
销毁控件
void TwDestroy(TWidget *widget);
功能:将控件销毁
参数:
参数 | 说明 |
---|---|
widget | 被销毁控件 |
返回值:无
设置控件得到焦点
void TwSetFocus(TWidget *widget);
功能:在系统中同一时间只能有一个控件获得焦点,好的焦点的控件才可以俘获非主动出发的系统事件,比如:键盘事件
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:无
示例:
TWidget *button = TwCreate(TW_BUTTON, mainWin, 100, 100, 113, 53, NULL, 0);
TwSetFocus(button);
设置控件不可获得焦点
void TwSetFocusFlags(TWidget *widget, Tuint32 flags);
功能:设置控件不可获得焦点
参数:
参数 | 说明 |
---|---|
widget | 控件 |
flags | 标记,取值:TW_CHILD_NO_FOCUS 和 TW_NO_FOCUS |
返回值:无
获取当前得到焦点的控件
TWidget *TwGetFocus(void);
功能:获取当前得到焦点的控件
参数:无
返回值:当前得到焦点的控件
通知系统显示控件
void TwShow(TWidget *widget);
功能:通知系统显示控件
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:无
通知系统显示控件并等待返回
void TwWaitShow(TWidget *widget);
功能:通知系统显示控件,并等待返回。
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:无
注解:与 TwShow 的区别为:TwShow 为异步处理,TwWaitShow为同步处理。
隐藏控件
void TwHide(TWidget *widget);
功能:隐藏控件
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:无
修改控件的宽度和高度
void TwResize(TWidget *widget, Tint32 w, Tint32 h);
功能:修改控件的宽高
参数:
参数 | 说明 |
---|---|
widget | 控件 |
w、h | 控件修改后的宽度和高度 |
返回值:无
示例:
TWidget *mainWin = TObjectGetFromName("mainWin");
TwResize(mainWin, 1024, 600);
设置控件的位置坐标
void TwMove(TWidget *widget, Tint32 x, Tint32 y);
功能:设置控件的坐标
参数:
参数 | 说明 |
---|---|
widget | 控件 |
x、y | 控件相对于父控件的坐标 |
返回值:无
示例:
TWidget *mainWin = TObjectGetFromName("mainWin");
TwMove(mainWin, 100, 50);
设置控件的位置坐标偏移量
void TwMoveOffset(TWidget *widget, Tint32 offx, Tint32 offy);
功能:新坐标以当前坐标偏移得到。
参数:
参数 | 说明 |
---|---|
widget | 控件 |
offx、offy | 新坐标相对于当前坐标的偏移量 |
返回值:无
示例:
TWidget *mainWin = TObjectGetFromName("mainWin");
TwMoveOffset(mainWin, 100, 50);
获取控件的宽度和高度
void TwGetSize(TWidget *widget, Tint *w, Tint *h);
功能:获取控件的宽和高
参数:
参数 | 说明 |
---|---|
widget | 控件 |
w、h | 保存控件的宽度和高度 |
返回值:无
示例:
TWidget *mainWin = TObjectGetFromName("mainWin");
int w,h;
TwGetSize(mainWin, &w, &h);
获取控件相对父控件的坐标
void TwGetPos(TWidget *widget, Tint *x, Tint *y);
功能:获取控件相对于父控件的坐标
参数:
参数 | 说明 |
---|---|
widget | 控件 |
x、y | 保存控件相对父控件的坐标 |
返回值:无
示例:
TWidget *button_1 = TObjectGetFromName("button_1");
int x,y;
TwGetPos(button_1, &x, &y);
获取控件相对坐标原点的绝对坐标
void TwGetAbsolutePos(TWidget *widget, int *px, int *py);
功能:获取控件相对坐标原点的绝对坐标
参数:
参数 | 说明 |
---|---|
widget | 控件 |
px、py | 保存控件相对坐标原点的绝对坐标 |
返回值:无
示例:
TWidget *button_1 = TObjectGetFromName("button_1");
int x,y;
TwGetAbsolutePos(button_1, &x, &y);
设置控件上附加的用户数据
void *TwAttachData(TWidget * widget, void *data);
功能:设置控件上附加的用户数据
参数:
参数 | 说明 |
---|---|
widget | 控件 |
data | 用户数据 |
返回值:无
示例:
TWidget *button_1 = TObjectGetFromName("button_1");
TTable *t = TTableCreate();
TTableAddInt(t, TStringID("val"), 1);
TwAttachData(button_1, t);
获取控件上附加的用户数据
void *TwGetAttachedData(TWidget *widget);
功能:获取控件上附加的用户数据
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:控件上附加的数据,可以是任意类型
示例:
TTable *t = TwGetAttachedData(button_1);
TTableDump(t);
设置控件状态为有效
void TwEnable(TWidget *widget);
功能:设置控件状态为有效
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:无
示例:
TWidget *button_1 = TObjectGetFromName("button_1");
TwEnable(button_1);
设置控件状态为无效
void TwDisable(TWidget *widget);
功能:设置控件状态为无效
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:无
示例:
TWidget *button_1 = TObjectGetFromName("button_1");
TwDisable(button);
注解:控件无效则不会响应任何事件消息
检测控件是否处于显示状态
Tbool TwCheckShow(TWidget *widget);
功能:检测控件是否处于显示状态
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:TRUE 控件处于显示状态
FALSE 控件处于隐藏状态
示例:
if(TwCheckShow(button_1) == TRUE)
{
TWHide(button_1);
}
检测控件是否获得焦点
Tbool TwCheckFocus(TWidget *widget);
功能:检测控件是否获得焦点
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:TRUE 控件获得焦点
FALSE 控件失去焦点
示例:
if(TwCheckFocus(button_1) == FALSE)
{
TwSetFocus(button_1);
}
检测控件状态是否为有效
Tbool TwCheckEnable(TWidget *widget);
功能:检测控件状态是否为有效
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:TRUE 控件状态有效
FALSE 控件状态无效
示例:
if(TwCheckEnable(button_1) == FALSE)
{
TwDisable(button_1);
}
设置控件的value值
Tbool TwSetValue(TWidget *widget, Tintp value);
功能:设置控件的value值
参数:
参数 | 说明 |
---|---|
widget | 控件 |
value | 整数值 |
返回值:TRUE 设置成功
FALSE 设置失败
示例:
TwSetValue(boolbutton_1, 1);
注解:
对于某些控件来说value值具有特殊意义。 如:布尔按钮的value值表示是否选中;进度条的value值表示当前进度;列表控件的value值为节点指针,表示当前节点获得焦点。
设置控件的标题
void TwSetCaption(TWidget *widget, const char *string);
功能:设置控件的标题
参数:
参数 | 说明 |
---|---|
widget | 控件 |
string | 标题内容 |
返回值:无
示例:
TwSetCaption(button_1, "hello");
获取控件的value值
Tintp TwGetValue(TWidget *widget);
功能:获取控件的value值
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:控件的value值
示例:
int val = TwGetValue(button_1);
获取控件的标题
const char *TwGetCaption(TWidget *widget, Tint *rlen);
功能:获取控件的标题
参数:
参数 | 说明 |
---|---|
widget | 控件 |
rlen | 保存标题内容长度 |
返回值:标题内容
示例:
TwGetCaption(button_1, 0);
设置控件背景图片
void TwSetBackgroundPixmap(TWidget *widget, Tuint pixmap);
功能:设置控件背景图片
参数:
参数 | 说明 |
---|---|
widget | 控件 |
pixmap | 背景图片 |
返回值:无
示例:
Pixmap map = TwLoadImage(TGetExecutePath("../style/img.png"));
TwSetBackgroundPixmap(button_1, map);
设置控件的背景颜色
void TwSetBackgroundColor(TWidget *widget, TColor color);
功能:设置控件的背景颜色
参数:
参数 | 说明 |
---|---|
widget | 控件 |
color | RGB值 |
返回值:无
注解:
RGB值需要用函数 T_BGR 来转换
示例:
TwSetBackgroundColor(myBtn, T_BGR(255,255,255)); //设置按钮myBtn的背景颜色为白色
改变控件风格
void TwChangeStyle(TWidget *widget, const char * style);
功能:改变控件风格
参数:
参数 | 说明 |
---|---|
widget | 控件 |
style | 风格名 |
返回值:无
示例:
TwChangeStyle(widget, "style");
判断 Ancestor 是否为 child 的祖控件
Tbool TwIsAncestor(TWidget * Ancestor, TWidget * child);
功能:判断 Ancestor 是否为 child 的祖控件
参数:
参数 | 说明 |
---|---|
Ancestor | 祖控件 |
child | 子控件 |
返回值:TRUE Ancestor 是 child 的祖控件
FALSE Ancestor 不是 child 的祖控件
示例:
if(TwIsAncestor(main_win, button_1))
{
printf("yes");
}
获取控件的父控件
TWidget *TwGetParent(TWidget *widget);
功能:获取控件的父控件
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:widget的父控件
TWidget *parent = TwGetParent(button_1);
获取控件的子控件
TWidget *TwGetChild(TWidget *widget, Tbool if_first);
功能:获取控件的子控件
参数:
参数 | 说明 |
---|---|
widget | 控件 |
if_first | 为 TRUE 返回第一个子控件,为 FALSE 返回最后一个子控件 |
返回值:子控件
示例:
TWidget *first_son = TwGetChild(mainWin, TRUE);
注解:子控件顺序默认为创建顺序
获取控件的兄弟控件
TWidget *TwGetSibling(TWidget *widget, Tbool if_next);
功能:获取控件的兄弟控件
参数:
参数 | 说明 |
---|---|
widget | 控件 |
if_next | 为 TRUE 返回后一个兄弟控件,为 FALSE 返回前一个兄弟控件 |
返回值:返回兄弟控件,没有兄弟控件返回 NULL
示例:
TWidget *sibling_widget = TwGetSibling(button_1, TRUE);
注解:兄弟控件顺序为创建的顺序。
通过窗口 ID 找到对应窗口控件
TWidget *TwFindFromXWindow(Window wid);
功能:通过窗口 ID 找到对应窗口控件
参数:
参数 | 说明 |
---|---|
wid | 窗口 ID |
返回值:窗口控件
示例:
// in窗口事件回调函数中传入的表
TWidget *w=TwFindFromXWindow(TTableGetInt(in, TW_STRING(subwid)));
获取窗口控件的 ID
Window TwGetXWindow(TWidget *widget);
功能:获取窗口控件的 ID
参数:
参数 | 说明 |
---|---|
widget | 控件 |
返回值:窗口 ID
示例:
subwid=TwGetXWindow(TObjectGetFromName("info_style"));
创建光标样式
Cursor TwCreateCursor(const char *file, int hotx, int hoty);
功能:创建光标样式
参数
参数 | 说明 |
---|---|
file | 光标图片路径 |
hotx、hoty | 光标热点坐标 |
返回值:光标样式对象
示例:
cursor = TwCreateCursor(TGetExecutePath("./cursor.png"), 7, 8);
注解:
光标热点就是光标引起动作的点
获取最后一次 CLICKED 事件的类型
TwClickTypeEnum TwGetLastClickType(void);
功能:获取最后一次 CLICKED 事件的类型
参数:无
返回值:事件类型
示例:
TwClickTypeEnum click_type = TwGetLastClickType();
切换当前的主题
void TwStyleSwitchTheme(const char * theme);
功能:切换当前的主题
参数:
参数 | 说明 |
---|---|
theme | 主题名 |
返回值:无
示例:
// config.ini中[style]下存在hello={"../style/xx.rc"}
TwStyleSwitchTheme("hello");
获取程序当前使用的主题名
T_ID TwStyleGetTheme(void);
功能:获取程序当前使用的主题名
参数:无
返回值:主题名
示例:
if(TwStyleGetTheme() == TStringID("hello"))
{
}
切换系统语言环境
void TwTransSwitchLanguage(const char *language);
功能:切换系统语言环境
参数:
参数 | 说明 |
---|---|
language | 语言名称 |
返回值:无
示例:
// config.ini的[translate]下配置了zh_CN="../translate/tran.zh_CN"
TwTransSwitchLanguage("zh_CN");
加载风格文件
void TwStyleParseFile(const char *file);
功能:加载风格文件
参数:
参数 | 说明 |
---|---|
file | 风格文件路径 |
返回值:无
示例:
TwStyleParseFile(TGetExecutePath("../style/style.rc"));
加载翻译文件
void TwTransParseFile(const char * file);
功能:加载翻译文件
参数:
参数 | 说明 |
---|---|
file | 翻译文件路径 |
返回值:无
示例:
TwTransParseFile(TGetExecutePath("../translate/trans.zh_CN"));
加载控件布局文件
void TwLayoutParseFile(TWidget * parent, const char * file);
功能:加载控件布局文件
参数:
参数 | 说明 |
---|---|
parent | 父控件 |
file | 布局文件路径 |
返回值:无
示例:
TwLayoutParseFile(root, TGetExecutePath("../etc/layout.ini"));
加载配置文件
void TwConfigParseFile(const char *file);
功能:默认配置文件中所有控件的祖控件为根窗口,配置文件加完完毕后即可调用相关函数获取配置文件中的各类数据。
参数:
参数 | 说明 |
---|---|
file | 配置文件路径 |
返回值:无
示例:
#config.ini内容:
[global]
max = 255
name = "china"
value = {
123
"abc"
}
// c 文件代码:
TwConfigParseFile(TGetExecutePath("../etc/config.ini"));
int iMax = TwConfigGetInt("global","max");
char *strName = TwConfigGetString("global","name");
TTable *tbArg = TwConfigGetTable("global","value");
printf("%d,%s\n",iMax,strName);
TTableDump(tbArg);
加载配置文件并指定配置文件中所有控件的祖控件
void TwConfigParseFile2(TWidget *parent, const char *file);
功能:加载配置文件并指定配置文件中所有控件的祖控件
参数:
参数 | 说明 |
---|---|
parent | 祖控件 |
file | 配置文件路径 |
返回值:无
示例:
TwConfigParseFile2(root, TGetExecutePath("../etc/layout.ini"));
获取配置文件中的整型数据
int TwConfigGetInt(char *section, char *name);
功能:获取配置文件中的整型数据
参数:
参数 | 说明 |
---|---|
section | 节点名 |
name | 标识名称 |
返回值:
当指定的节点存在时返回一个整型值,否则返回 0
示例:
// config.ini的[global]下必须有name = n;
int val = TwConfigGetInt("global", "name");
获取配置文件中的字符串数据
char *TwConfigGetString(char *section, char *name);
功能:获取配置文件中的字符串数据
参数:
参数 | 说明 |
---|---|
section | 节点名 |
name | 标识名称 |
返回值:当指定的节点存在时返回一个字符串,否则返回 NULL
示例:
// config.ini中[global]下存在str="xxx"
char *str = TwConfigGetString("global", "str");
获取配置文件中的 TTable 数据
TTable *TwConfigGetTable(char *section, char *name);
功能:获取配置文件中的 TTable 数据
参数:
参数 | 说明 |
---|---|
section | 节点名 |
name | 标识名称 |
返回值:当指定的节点存在时返回一个 Table 结构指针,否则返回NULL。
示例:
// config.ini下[global]下存在tab
TTable *t = TwConfigGetTable("global", "tab");
TTableDump(t);
翻译字符串
const char *TwTrans(const char *string);
功能:翻译字符串
参数:
参数 | 说明 |
---|---|
string | 需翻译的字符串标识 |
返回值:翻译后的字符串
示例:
printf("%s\n",TwTrans("hello"));
注解:
该函数需要配合翻译文件使用,如果需要翻译的字符串标识在翻译文件中不存在则返回这个字符串标识。
将当前列表视图控件关联一个数据模型
void TwSetDataModel(TWidget *widget, TwDataNode *show_root, T_ID show_root_type);
功能:将当前列表视图控件关联一个数据模型
参数:
参数 | 说明 |
---|---|
widget | 列表视图控件 |
show_root | 数据模型的根节点 |
show_root_type | 数据模型根节点类型,和排版的配置相关 |
返回值:无
示例:
TWidget *listview;
TwDataModel *dm;
dm = TwDMCreate(TStringID("test_root")); //创建一个根节点名为"test_root"的数据模型
TwSetDataModel(listview, TwDMGetRootNode(dm), None); //将列表视图控件 listview 与数据模型dm关联起来