Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GUI
我贡献一个GUI的代码wprintf(代码附上)
发布于 2012-11-17 18:42:41 浏览:4593
订阅该版
这是一个封装函数,类似printf的功能,可以输出到GUI窗口上,用rt_thread_create创建一个线程,在线程中直接调用wprintf函数就可以和一个gui窗口对话,将其输出到窗口上,当线程退出时候,将自动销毁窗口。 不过wprintf支持彩色字符串输出,只支持英文字符。 今天晚上回去传代码,并附有测试函数,有4个文件,代码稍微多点,不方便发上来,晚上回去了传文件上来。有兴趣的可以测试使用一下。 源代码贴上:(原理阐述在四楼) - [wprintf.zip](/uploads/3948_106e7f7426f7c0645e7ea037695a8073.zip) ![psb.jpg](https://oss-club.rt-thread.org/uploads/3948_3a17977e9e8c25fee1dc3a100d97e714.jpg)
查看更多
11
个回答
默认排序
按发布时间排序
grissiom
2012-11-17
这家伙很懒,什么也没写!
指的是哪个版本的 RTGUI? 嗯,wprintf 会不会影响原有的控件呢?不知道这个怎么处理,不过还是很期望 LZ 的代码
rtt-fans
2012-11-17
这家伙很懒,什么也没写!
>指的是哪个版本的 RTGUI? > >嗯,wprintf 会不会影响原有的控件呢?不知道这个怎么处理,不过还是很期望 LZ 的代码 --- 不会影响原有的控件,是在所有底层窗口上创建的一个窗口,当线程线程退出时清除显示窗口,参考下面图片: [attach]0[/attach]
rtt-fans
2012-11-17
这家伙很懒,什么也没写!
## 实现原理: 在一个后台线程中,首次调用wprintf的时候,会获取`rt_thread_self()->user_data`是否有值,这里存放的是关联的gui窗口。 如果为0,则创建一个新窗口,窗口指针放到user_data上,并把`rt_thread_self()->cleanup`设置为窗口的销毁函数,这样当线程退出时执行cleanup,窗口就跟随退出; 这样就可以做到每个后台线程调用wprintf的时候会创建对应的输出窗口。 窗口内部我是自定了一个叫做ColorChar的控件,此控件的作用就是控制文本,对每一个文本每个颜色的文本给连接起来,并管理插入提示符的闪烁,对文本中的一些转义字符处理,这里稍微复杂些。 还留有一些问题,当用鼠标点击窗口关闭时,后台的线程还在持续运行wprintf输出的话,就会出错,不过做到gui窗口关闭让后台的线程也退出应该也合理,在gui窗口的线程中加入cleanup操作,就可以在gui线程退出时把后台线程给结束掉,应该可以这么做。
nongxiaoming
2012-11-17
rt-thread大师兄
看起来还不错的样子~
grissiom
2012-11-18
这家伙很懒,什么也没写!
估计不能找原样接收…… 因为在 RTGUI 里 thread->user_data 指向的是 rtgui_app。所以如果 wprintf 覆盖了这个变量,而这个线程又用到 rtgui_app,那么必然要崩溃…… 新的 RTGUI 里已经必须要用到 app 了。 如果加进来的话,可能会是以一个 console widget 的形式来做。对于控制字符,可以参考: [http://www.xfree86.org/current/ctlseqs.html](http://www.xfree86.org/current/ctlseqs.html)
rtt-fans
2012-11-18
这家伙很懒,什么也没写!
>估计不能找原样接收…… > >因为在 RTGUI 里 thread->user_data 指向的是 rtgui_app。所以如果 wprintf 覆盖了这个变量,而这个线程又用到 rtgui_app,那么必然要崩溃…… 新的 RTGUI 里已经必须要用到 app 了。 > >如果加进来的话,可能会是以一个 console widget 的形式来做。对于控制字符,可以参考: [http://www.xfree86.org/current/ctlseqs.html](http://www.xfree86.org/current/ctlseqs.html) --- 我下载一个最新的gui看看,我是在1.0.0或1.1.0的基础上做的,控制字符那个现在已被认为是不实用的了,不必要做了。
rtt-fans
2012-11-18
这家伙很懒,什么也没写!
我看了最新的代码. 线程分为两类,一种是普通的线程,这种只是在后方运行,一种是gui线程,这种线程不断的接收消息和处理消息。针对gui线程,其user_data是存放了rtgui-app,普通线程是不会有窗口的,在普通线程中调用wprintf函数,要将产生的数据输出到窗口上,肯定不能在普通线程内部运行窗口,必须启动一个gui线程来运行窗口过程,这里没有进程,普通线程的user_data可以存放gui窗口的数据,相当于绑定到一个窗口,其后继续调用wprintf会全部输出到绑定的窗口上。 wprintf是这样的一个效果。 我这个代码是作为example来的,不过现在看来在新版本上还得做个修改。
bernard
2012-11-18
这家伙很懒,什么也没写!
如果是作为console、或类似Linux那样的terminal,建议做成独立的App。
rtt-fans
2012-11-18
这家伙很懒,什么也没写!
>如果是作为console、或类似Linux那样的terminal,建议做成独立的App。 --- 再往下探究,就超出力所能及的范围了,呵呵,等大牛来解决。
luoyuncong
2012-11-19
这家伙很懒,什么也没写!
如果社区再多一点像楼主一样的人就好了。
撰写答案
登录
注册新账号
关注者
0
被浏览
4.6k
关于作者
rtt-fans
这家伙很懒,什么也没写!
提问
13
回答
37
被采纳
0
关注TA
发私信
相关问题
1
[已解决]创建GUI显示线程,出现bus fault错误应该怎么解?
2
移植RTGUI后,使用RealBoard4088的按键驱动切换画面,出现一次按键,触发两次事件的异常
3
【已解决】keil中添加rtgui的demo程序的问题
4
RT-GUI触摸BUG?
5
【已解决】请问:如何把example目录下rtgui的例子添加到工程中
6
RT-GUI不需要开辟一块和屏尺寸相同的存储空间记录屏幕上的数据吗?
7
RT-GUI开发疑问?
8
RTGUI 发送消息队列失败
9
gui的汉字字库能只挑出自己使用的汉字编译吗?
10
建议RTGUI的汉字和BMP等方框绘图增加窗口支持
推荐文章
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
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
13
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
7
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部