Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
DIY综合交流区
控件焦点问题
发布于 2013-07-29 09:27:15 浏览:4283
订阅该版
LZ好:在参考simulator里的应用方式后,我自己在应用时关于控件切换后焦点的一些疑问,希望可以得到解答。 应用方式: 首先创建了notebook1控件,然后创建了多个container用于放不同的菜单选项,这些container都加入到notebook1下进行管理; 然后在container下创建了一个新的notebook tab用于子菜单选项切换; 问题: 我在server和notebook控件里添加了方向按键的事件,由于产品没有触摸屏和鼠标设备,仅有一个笔记本键盘,当我通过F1按键事件切换notebook1下不同的container时没有问题,当按方向键想切换子菜单下的内容时,发现控件不响应按键事件,明显是没有获得焦点,这里的焦点应该如何处理呢?谢谢! [s:188] 建议:能不能增加GUI的调试模式用于显示焦点位置之类的功能,类似android里开发者选项->显示指针位置和触摸操作。 PS:坐等nongxiaoming的可视化编辑工具放出。。。。 关键代码如下: ```/* 创建用于演示textbox控件的视图 */ rtgui_container_t *consumable_media(void) { rtgui_rect_t rect, textbox_rect; rtgui_container_t *container; rtgui_label_t *label; rtgui_textbox_t *text; rtgui_listbox_t *box; rtgui_radiobox_t *radiobox; /* 先创建一个演示用的视图 */ container = consumable_view("选项1"); /* 获得视图的位置信息 */ rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); rtgui_widget_rect_to_device(RTGUI_WIDGET(container), &rect); /* 去除演示标题和下方按钮的区域 */ rect.y1 += 30; rect.y2 -= 30; rect.x1 += 5; rect.x2 = rect.x1 + 300; notebook = rtgui_notebook_create(&rect, RTGUI_NOTEBOOK_TOP); /* container是一个container控件,调用add_child方法添加这个notebook控件 */ rtgui_container_add_child(container, RTGUI_WIDGET(notebook)); rtgui_widget_get_rect(RTGUI_WIDGET(container), &rect); rtgui_widget_rect_to_device(RTGUI_WIDGET(container), &rect); rect.x1 = 0; rect.x2 = rect.x1 + 300; /* 创建一个垂直方向显示的radiobox控件,文本项是radio_item_v数组,共5个项 */ radiobox = rtgui_radiobox_create("", RTGUI_VERTICAL, casing_item_v, 3); /* 设置当前选择的数组是第0项 */ rtgui_radiobox_set_selection(radiobox, 0); /* 添加radiobox控件到视图中 */ /* 设置radiobox控件的位置信息 */ rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect); rtgui_notebook_add(notebook, "类型1", RTGUI_WIDGET(radiobox)); /* 创建一个垂直方向显示的radiobox控件,文本项是radio_item_v数组,共5个项 */ radiobox = rtgui_radiobox_create("", RTGUI_VERTICAL, paster_item_v, 3); /* 设置当前选择的数组是第0项 */ rtgui_radiobox_set_selection(radiobox, 1); /* 添加radiobox控件到视图中 */ /* 设置radiobox控件的位置信息 */ rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect); rtgui_notebook_add(notebook, "类型2", RTGUI_WIDGET(radiobox)); /* 创建一个垂直方向显示的radiobox控件,文本项是radio_item_v数组,共5个项 */ radiobox = rtgui_radiobox_create("", RTGUI_VERTICAL, paster_item_v, 3); /* 设置当前选择的数组是第0项 */ rtgui_radiobox_set_selection(radiobox, 2); /* 添加radiobox控件到视图中 */ /* 设置radiobox控件的位置信息 */ rtgui_widget_set_rect(RTGUI_WIDGET(radiobox), &rect); rtgui_notebook_add(notebook, "类型3", RTGUI_WIDGET(radiobox)); return container; }``` ![2013-07-29_090109.jpg](https://oss-club.rt-thread.org/uploads/3643_152cf237a259b3b504430510736c31f3.jpg)
查看更多
8
个回答
默认排序
按发布时间排序
nongxiaoming
2013-07-29
rt-thread大师兄
可视化设计器在内测,但可惜的是现在还不支持Notebook控件可视化设计,这个比较复杂。
haitao52198
2013-07-29
这家伙很懒,什么也没写!
>可视化设计器在内测,但可惜的是现在还不支持Notebook控件可视化设计,这个比较复杂。 --- 嗯,我觉得notebook也是应用很灵活,如上:我现在想通过方向键切换类型1 类型2以及下面的子菜单选项,我的焦点应该设置到哪里?
grissiom
2013-07-29
这家伙很懒,什么也没写!
放在哪里取决于你的设计,可以参考 demo 里的 demo_application.c 里的 demo_handle_key。那个是放在窗口中的。
haitao52198
2013-07-31
这家伙很懒,什么也没写!
>放在哪里取决于你的设计,可以参考 demo 里的 demo_application.c 里的 demo_handle_key。那个是放在窗口中的。 --- 非常感谢,我现在在键盘驱动里判断键值后切换焦点到textbox的控件上,然后将按键事件发送给sever,整个过程都可以但是最终rtgui_time_out()里发送的事件rtgui_send(timer->app, &(event.parent), sizeof(rtgui_event_timer_t)); timer->app是空指针导致RT_ASSERT检查不过,这里的timeout是光标的显示用的吗?为什么我这里会挂掉呢?真是奇怪。。。。 [s:182]
haitao52198
2013-07-31
这家伙很懒,什么也没写!
跟到问题的根源了,貌似不能在非GUI的线程里rtgui_widget_focus去改变控件的焦点时,就会获取当前的线程的app ``` /* get current thread */ self = rt_thread_self(); app = (struct rtgui_app *)(self->user_data); ``` 当前线程只是一个普通的任务线程,所以user_data指向0地址导致后面定时器超时回调时出现了问题; 搞定:正确的用法是我要到gui的应用程序中的键盘事件中判断键值,再做焦点切换。。。 自己学习好孤独。。。。。。 [s:182]
grissiom
2013-07-31
这家伙很懒,什么也没写!
解决了问题就好~ 慢慢的学习速度就会快起来~
haitao52198
2013-07-31
这家伙很懒,什么也没写!
>解决了问题就好~ 慢慢的学习速度就会快起来~ --- 嗯,貌似真正在用RTGUI做产品的人不多啊,提问的太少,可能主要原因是文档吧,很少有人愿意慢慢的摸索,确实挺浪费开发时间
撰写答案
登录
注册新账号
关注者
0
被浏览
4.3k
关于作者
haitao52198
这家伙很懒,什么也没写!
提问
42
回答
260
被采纳
0
关注TA
发私信
相关问题
1
[项目]搞个开源的硬件项目
2
硬件计划贴,及时更新,欢迎提意见
3
软件计划贴,及时更新,欢迎提意见::WMA,MOUNT,LWIP等问题急需解决.
4
MMS协议
5
定点的wma解压库-libwma
6
QQ群记录 [20090821]
7
STM32网络收音机PCB报名征集
8
第一版调试记录
9
第二版硬件讨论
10
RADIO项目相关模块规格--欢迎大家自己做板时规格与此兼容,减少重复劳动
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
8
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
3
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部