Duilib 源码分析之 CTextUI 篇
2017-12-20 18:06
701 查看
Duilib 中的
当绘制 html 内容的时候,若其中有超链接,则需要使用
我们来着重看一下
具体支持的格式可以参考方法
不过我个人认为这个
超链接相关的成员变量
int m_nLinks 超链接的个数,不会超过 MAX_LINK
RECT m_rcLinks[MAX_LINK] 超链接的位置,矩形区域的数组
CDuiString m_sLinks[MAX_LINK] 各个连接的 url
m_nHoverLink 当前鼠标悬停在第几个超链接上
DoEvent 中的处理
收到
收到
收到
综上,我认为
CTextUI和
CLabelUI差别并不大,主要的区别有两点:
CTextUI默认多行显示,而
CLabelUI默认单行居中显示
当绘制 html 内容的时候,若其中有超链接,则需要使用
CTextUI,其中分装了对超链接的处理
我们来着重看一下
CTextUI中对 html 中的超链接的处理。先看一个例子。设置控件的
text="<a http://www.baidu.com>百度</a>{b}加粗{/b} <c #FF0000>红色</c> {i}斜体{/i}{n} {u}下划线{/u} {n} {s}选中{/s}"在界面上显示的效果为:
具体支持的格式可以参考方法
DrawHtmlText中的注释:
// 考虑到在xml编辑器中使用<>符号不方便,可以使用{}符号代替 // 支持标签嵌套(如<l><b>text</b></l>),但是交叉嵌套是应该避免的(如<l><b>text</l></b>) // The string formatter supports a kind of "mini-html" that consists of various short tags: // // Bold: <b>text</b> // Color: <c #xxxxxx>text</c> where x = RGB in hex // Font: <f x>text</f> where x = font id // Italic: <i>text</i> // Image: <i x y z> where x = image name and y = imagelist num and z(optional) = imagelist id // Link: <a x>text</a> where x(optional) = link content, normal like app:notepad or http:www.xxx.com // NewLine <n> // Paragraph: <p x>text</p> where x = extra pixels indent in p // Raw Text: <r>text</r> // Selected: <s>text</s> // Underline: <u>text</u> // X Indent: <x i> where i = hor indent in pixels // Y Indent: <y i> where i = ver indent in pixels // Vertical align <v x> where x = top or x = center or x = bottom
不过我个人认为这个
DrawHtmlText方法有些鸡肋,功能不完善且不易使用 (仅发表个人观点,不喜勿喷)
超链接相关的成员变量
int m_nLinks 超链接的个数,不会超过 MAX_LINK
RECT m_rcLinks[MAX_LINK] 超链接的位置,矩形区域的数组
CDuiString m_sLinks[MAX_LINK] 各个连接的 url
m_nHoverLink 当前鼠标悬停在第几个超链接上
DoEvent 中的处理
收到
UIEVENT_SETCURSOR时,若鼠标在某个超链接上则设置鼠标为手型
收到
UIEVENT_BUTTONUP事件时,若鼠标在某个超链接上则发送
DUI_MSGTYPE_LINK通知,在监控通知的地方可以进行打开 url 或者打开某个程序等等
收到
UIEVENT_MOUSEMOVE时计算
m_nHoverLink的值,个人认为这个值应该用于绘制超链接的悬停的颜色控制上,但目前的源码中绘制时并没有使用到这个成员变量。 而且在
DrawHtmlText方法中只是判断是否悬停在了某个超链接上,这样导致所有的超链接颜色都会改变,这应该是一个 bug
综上,我认为
CTextUI主要是默认做成了多行显示,而且这一点
CLabelUI中也可以通过添加 multiline 属性做到 (有些版本的 Duilib 不支持),而
CTextUI控件的 html 的绘制目前来看效果不是很好。大家可以根据自己手中版本的 Duilib 在适当的场合选择使用
CTextUI和
CLabelUI关键在于属性的控制上。
相关文章推荐
- Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备四)
- Duilib 源码分析之 COptionUI 篇
- Duilib源码分析(四)绘制管理器—CPaintManagerUI—(前期准备三)
- Duilib源码分析(五)UI布局—Layout与各子控件
- Duilib源码分析(四)绘制管理器—CPaintManagerUI
- (二)UI绘制流程-绘制过程源码分析
- fastText 之其源码分析
- duilib中CTextUI控件设置文字时不刷新显示的bug
- [Cocos2d-x]源码分析之 2d/ui/UILayout
- 【Cocos2d-x】源码分析之 2d/ui/Widget
- Duilib 源码分析之字体篇
- Launcher3源码分析 — ui结构
- 开源项目ExpandableTextView使用和源码分析
- AutoCompleteTextView的使用和源码分析以及实现响应式输入提示功能
- 强大的提示控件TextInputLayout使用以及源码分析
- Duilib 源码分析之 xml 解析篇
- UE4中UMG UI Navigation的源码分析
- android TextToSpeech 源码分析
- 源码分析android的UI绘制流程
- DuiLib的源码分析