Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
关于DC的疑问
发布于 2010-07-21 10:27:59 浏览:4548
订阅该版
昨晚,试用DC在LCD上绘制一个网格。 发现没能绘制成功。 水平线第一条没画,其他都画了。然后竖线一根都没有画。 我主要是修改demo_view_dc.c中的dc_event_handler函数来画的。 int x,y; x=30; y=30; for ( y = 30; y < 320; ) { rtgui_dc_draw_hline(dc,0,320,y); y +=30; } for ( x = 30; x < 240; ) { rtgui_dc_draw_vline(dc,0,240,x); x +=30; } DC 会调用rtgui_dc_hw_draw_hline来画,发现函数里有两行代码如下: owner = RTGUI_CONTAINER_OF(self, struct rtgui_widget, dc_type); if (!RTGUI_WIDGET_IS_DC_VISIBLE(owner)) return; 这里owner是指什么呢?我的workbench就只有一个view. DC不算是一种控件吧。 其实我就想实现在一个view上画个网格线。
查看更多
7
个回答
默认排序
按发布时间排序
bernard
2010-07-21
这家伙很懒,什么也没写!
你这里指定的是物理绝对坐标,但是DC需要的是逻辑坐标。所以在一个DC上绘图时先要获得owner的位置,然后根据位置进行绘图。 DC的owner控件在开始一个DC绘图时,需要做为函数传入的方式进行指定。
Gavin_Li
2010-07-21
这家伙很懒,什么也没写!
那这里的owner指的是那个对象?(DC自己?还是view?)
bernard
2010-07-21
这家伙很懒,什么也没写!
>那这里的owner指的是那个对象?(DC自己?还是view?) --- demo_view_dc: /* * view的事件处理函数 */ rt_bool_t dc_event_handler(rtgui_widget_t* widget, rtgui_event_t *event) { ... /* 获得控件所属的DC */ dc = rtgui_dc_begin_drawing(widget); // **这里的widget就是owner** /* 如果不能正常获得DC,返回(如果控件或父控件是隐藏状态,DC是获取不成功的) */ if (dc == RT_NULL) return RT_FALSE;
Gavin_Li
2010-07-21
这家伙很懒,什么也没写!
恩,谢谢你的回答。但是我想知道的就是这个具体对应到owner的object指的是那个控件。 好无疑问,传进来的都是widget对象。widget是所有控件的父类。 我看到 rtgui_view_t *demo_view_dc(rtgui_workbench_t* workbench) { rtgui_view_t *view; view = demo_view(workbench, "DC Demo"); if (view != RT_NULL) /* 设置成自己的事件处理函数 */ rtgui_widget_set_event_handler(RTGUI_WIDGET(view), dc_event_handler); return view; } 所以我想执行dc_event_handler(rtgui_widget_t* widget, rtgui_event_t *event)函数时,传进来的 widget是view对象转换来的。是不是这样的?如果这样。owner对应的物理坐标就是view的物理坐标,这样没法解释通下面的代码啊 static void rtgui_dc_hw_draw_hline(struct rtgui_dc* self, int x1, int x2, int y) { register rt_base_t index; rtgui_widget_t *owner; if (self == RT_NULL) return; /* get owner */ owner = RTGUI_CONTAINER_OF(self, struct rtgui_widget, dc_type); if (!RTGUI_WIDGET_IS_DC_VISIBLE(owner)) return; /* convert logic to device */ x1 = x1 + owner->extent.x1; x2 = x2 + owner->extent.x1; y = y + owner->extent.y1; 。。。。。。。。。。。 }
bernard
2010-07-21
这家伙很懒,什么也没写!
rtgui_widget_t是一个类别,是一个基类。 所有不同的控件都可以转换成一个基类(rtgui_widget_t)对待。所以,当你需要再哪个控件上进行绘图时,你首先要获得的是这个控件的DC。换个角度,一个DC是属于一个控件的,这个控件就是它的owner。 例如,你需要在一个view上绘图,那么需要取得view的DC(设备图形上下文)。你需要在一个button上绘图,那么就需要取得这个button的DC。
Gavin_Li
2010-07-22
这家伙很懒,什么也没写!
总算明白了。 [s:175] [s:175]
撰写答案
登录
注册新账号
关注者
0
被浏览
4.5k
关于作者
Gavin_Li
这家伙很懒,什么也没写!
提问
28
回答
74
被采纳
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
使用百度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
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部