Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
rtGUI 中button事件的问题
发布于 2011-12-18 11:14:25 浏览:8925
订阅该版
我现在对应收音机项目和RTT例程中的GUI例子学习GUI,今天发现botton中有一个rtgui_button_set_onbutton函数可以将按键和对应的事件回调函数绑定。我的理解就是调用他之后,再单击这个botton就会自动调用对应的回调函数,不知道我的理解对不对。 而后来我看收音机的程序,发现其中并没有通过这种方法来绑定按键的回调函数,而是通过在home_view_event_handler事件函数中读取触摸屏的坐标,然后根据坐标判断到底是触摸了那个按键,然后再分别去掉用各自的按键回调函数。我感觉上面这个过程更加合理。我这里不理解为什么这里不使用rtgui_button_set_onbutton这个函数直接绑定呢?是不能在触摸屏里面使用吗? 另外,我发现使用rtgui_button_set_onbutton函数绑定的例子里面并没有调用botton的事件处理函数,是不是使用这个函数绑定之后就不需要在调用botton的even_handler函数了?另外使用这个函数是如何根据触摸屏的坐标来判断到底是按动了那个键? 希望有老大能解释一下。
查看更多
13
个回答
默认排序
按发布时间排序
grissiom
2011-12-18
这家伙很懒,什么也没写!
嗯?RTT trunk/examples/gui/demo_view.c 里是通过 set_on_button 来设置回调函数的啊…… 就我现在粗浅的理解来看,理想情况下用户应该用不着去管 view 里的实现,view 是负责分配事件的。 判断是不是自己被按下是在 trunk/components/rtgui/widgets/button.c 里的 rtgui_button_event_handler 中进行的,回调函数也是在那里被调用的~ 同样的,如果要是使用的话直接用就好~
天才杨威利
2011-12-18
这家伙很懒,什么也没写!
>嗯?RTT trunk/examples/gui/demo_view.c 里是通过 set_on_button 来设置回调函数的啊…… > >就我现在粗浅的理解来看,理想情况下用户应该用不着去管 view 里的实现,view 是负责分配事件的。 > >判断是不是自己被按下是在 trunk/components/rtgui/widgets/button.c 里的 rtgui_button_event_handler 中进行的,回调函数也是在那里被调用的~ 同样的,如果要是使用的话直接用就好~ --- 我之前裸奔使用触摸屏也是这样,通过读取液晶返回的坐标值来判断是那个按键被按下去。而且在RTT的网络收音机的例程中也确实是这样做的,在touch文件中读取液晶的AD数值,转换成坐标之后通过rtgui_server_post_event向Server发送消息,然后view控件接收到消息调用home_view_event_handler这个事件回调函数,在其中读取坐标,并且判断对应的按键来分别执行不同的函数。这个流程我可以理解,但是看到demo_view.c这个例子里面通过 set_on_button函数来设定回调函数,而且没有设定我现在想弄明白: 1.set_on_button函数实现的功能是不是跟rtgui_widget_set_event_handler一样都是将回调函数和控件绑定?只不过前一个只能针对botton控件? 2.利用set_on_button函数的话看例子并不需要通过坐标来判断按下的按键,因此是不是这样做系统可以自动根据坐标判断我触发了那个按键?然后调用特定的回调函数?也就是如果我的液晶上有N个按键都分别通过set_on_button函数给每个按键绑定了一个回调函数,那么当我使用触摸的方式点击一个按键的时候,系统可以自动调解析坐标,然后调用正确的回调函数? 3.如果2的假设成立,那么咱们的网络收音机就应该使用这种方式呀?这种方式明显要比现在例子里面的方式简单,方便。
bernard
2011-12-18
这家伙很懒,什么也没写!
手头没代码,说说当时的设计想法。 set_onbutton是用于自动调用,回调函数也不需要关心坐标位置。event handle则是更底层的能够操作的事情更多。
天才杨威利
2011-12-19
这家伙很懒,什么也没写!
感谢老大的回复。那么是不是我在even_handler中在接收到button事件后,通过读取坐标来判断被触碰的是那个按键,在根据按键来调用对应的回调函数,这个过程通过set_onbutton就可以自动完成了?系统会自动解析那个按键被触碰,然后调用对应的回调函数?如果是这样那就太方便了,我的界面上有6个个按键,直接给每个设定一个回调函数就可以不需要使用even_handler了,不知道是不是这样? 另外还有一个问题,不管是用哪种方式,发送botton事件的方式并没有变化对吧?
bernard
2011-12-19
这家伙很懒,什么也没写!
嗯,你是否理解有些偏差? 按键是key,onbutton是按钮。key和button是不一样的概念。button设置了onbutton回调,那么只会针对相应的button,即相应的按钮。而不是键盘上的某个按键。 需要处理按键,还是需要重载event handler来进行处理。
天才杨威利
2011-12-19
这家伙很懒,什么也没写!
但是对于触摸屏来说屏幕上显示的应该都是botton,而网络收音机里面确实是调用event handler来读取对应的触摸屏坐标。这个和你上面的介绍是不是有点矛盾?另外在触摸屏里面应该没有所谓的按键吧?都应该是button类型。 另外,我确实有点混了,咱们手册上值得key我能理解,就是实体的按键,那么botton指的是什么?是不是一种抽象的变量类型?或者说是触摸屏上那种按钮?这点希望老大给解释一下。
bernard
2011-12-19
这家伙很懒,什么也没写!
唔,我有些晕了。 如果是触摸屏上的button,那么直接设置onbutton即可,GUI系统会自行处理坐标关系不需要用户关心了。
bernard
2011-12-19
这家伙很懒,什么也没写!
>我的界面上有6个个按键,直接给每个设定一个回调函数就可以不需要使用even_handler了,不知道是不是这样? --- 确实是这样
天才杨威利
2011-12-19
这家伙很懒,什么也没写!
感谢老大的回答,这下子编程序方便多了。直接利用set_onbutton函数来绑定就可以了。不需要向收音机项目里面那样使用even_handler函数来读取坐标了。
grissiom
2011-12-19
这家伙很懒,什么也没写!
我了个去,我说过回调函数是在 rtgui_button_event_handler 中调用的,只要看过代码就会明白,在 button 的时间处理函数中会判断是不是把自己按下了,如果是,才会调用 set_onbutton 里设定的回调函数…… 看来天才哥木有看源代码啊,嘿嘿嘿……
撰写答案
登录
注册新账号
关注者
0
被浏览
8.9k
关于作者
天才杨威利
这家伙很懒,什么也没写!
提问
14
回答
54
被采纳
0
关注TA
发私信
相关问题
1
有关动态模块加载的一篇论文
2
最近的调程序总结
3
晕掉了,这么久都不见layer2的踪影啊
4
继续K9ii的历程
5
[GUI相关] FreeType 2
6
[GUI相关]嵌入式系统中文输入法的设计
7
20081101 RT-Thread开发者聚会总结
8
嵌入式系统基础
9
linux2.4.19在at91rm9200 上的寄存器设置
10
[转]基于嵌入式Linux的通用触摸屏校准程序
推荐文章
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
2024 RT-Thread睿赛德开发者大会共探商业共赢的开源生态
2
rt-thread 小内存算法源码分析
3
env中添加lvgl软件包后,keil编译包--c99错误
4
【NXP-MCXA153】 定时器驱动移植
5
GD32F450 看门狗驱动适配
热门标签
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
UART
WIZnet_W5500
ota在线升级
PWM
freemodbus
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
Debug
中断
编译报错
rt_mq_消息队列_msg_queue
SFUD
keil_MDK
msh
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
20
个答案
3
次被采纳
红枫
8
个答案
2
次被采纳
踩姑娘的小蘑菇
7
个答案
2
次被采纳
三世执戟
7
个答案
1
次被采纳
Ryan_CW
5
个答案
1
次被采纳
本月文章贡献
YZRD
3
篇文章
6
次点赞
catcatbing
3
篇文章
6
次点赞
lizimu
2
篇文章
12
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部