|
调试了几个串口,好像都背景颜色,RTGUI_WIDGET_BACKGROUND(RTGUI_WIDGET(view)) = green; 那个函数好像不起作用,不知道是什么原因,我刚刚接触不久。
下面是那个没有用到那个函数的,默认的应该是白色的吧,但是没有背景,谁可以帮帮我呀。
void msg(void)
{
/* UI依赖于一定的线程环境,具体的,它依赖于一个消息队列,这个消息队列会接收来自GUI Server的请求信息 */
rt_mq_t mq; /* mq即这个消息队列 */
rt_thread_t tid;
rt_uint32_t user_data;
struct rtgui_win* msgbox; /* 显示一个消息窗口,这里是它相应的窗口指针 */
struct rtgui_rect rect = {100, 100, 300, 300}; /* 窗口的显示位置 */
/* UI中,消息是在线程间传递的,所以接收消息的消息队列需要紧贴到线程中去,RT-Thread中用到了线程的私有字段:user_data */
tid = rt_thread_self();
if (tid == RT_NULL) return; /* 获得当前线程,如果当前线程是空,即调度器未启动,UI不能使用,直接返回 */
user_data = tid->user_data; /* 先保存老的user_data */
/* 创建一个256 x 4的消息队列 */
mq = rt_mq_create("msgbox", 256, 4, RT_IPC_FLAG_FIFO);
/* 注_册消息队列mq到当前线程上 */
rtgui_thread_register(tid, mq);
/* 创建窗口,参数包含父控件,窗口标题、窗口位置(注意窗口的标题、边框是由GUI Server维护的,所以实际上大小要大上一圈),风格参数 */
msgbox = rtgui_win_create(RT_NULL, "Information", &rect, RTGUI_WIN_STYLE_DEFAULT);
if (msgbox != RT_NULL)
{
/* box是个盒子,更是一个布局的引擎,内部的空间不需要指定位置,可以由box自动布局 */
struct rtgui_box* box = rtgui_box_create(RTGUI_VERTICAL, RT_NULL);
struct rtgui_label* label = rtgui_label_create("Hello World"); /* 创建Hello World的标签 */
rtgui_win_set_box(msgbox, box); /* 设置窗口的布局盒子 */
RTGUI_WIDGET(label)->align = RTGUI_ALIGN_CENTER_HORIZONTAL | RTGUI_ALIGN_CENTER_VERTICAL; /* 标签的布局风格,垂直、水平居中 */
rtgui_widget_set_miniwidth(RTGUI_WIDGET(label),130); /* 设置标签的最小长度 */
rtgui_box_append(box, RTGUI_WIDGET(label)); /* 添加标签到盒子中 */
rtgui_box_layout(box); /* 当所有控件添加完时,显式调用layout做盒子的自动布局 */
rtgui_win_show(msgbox,RT_FALSE); /* 显示这个窗口 */
}
rtgui_win_event_loop(msgbox); /* 执行窗口的事件循环 */
/* 能够走到这步,就意味着,这个窗口已经关闭了 */
rtgui_thread_deregister(tid); /* 去注_册当前线程 */
/* 删除相应的消息队列 */
rt_mq_delete(mq);
/* 恢复用户数据 */
tid->user_data = user_data;
}
(原文件名:110414A001_副本.jpg) |
|