DirectWrite文字排版——字符串去尾
DirectWrite是 DirectX 家族中专门用来做文本处理的部分,主要配合Direct2D进行渲染工作。
设置溢出布局宽度的文本的剪裁选项。
语法
virtual HRESULT SetTrimming(
[in] const DWRITE_TRIMMING * trimmingOptions,
IDWriteInlineObject * trimmingSign
) = 0;
参数
- trimmingOptions [in]
-
文本剪裁选项。
- trimmingSign
-
应用程序定义的忽略符号。此参数可为 NULL。注意:我们想要用到省略号代替裁剪部分就需要用到这个参数。
返回值
如果该方法成功,则返回 S_OK。 否则,将返回错误代码。HRESULT.
(2)DWRITE_TRIMMING 结构 (SetTrimming函数的第一个参数)
指定用于溢出布局框的文本的剪裁选项。
语法
struct DWRITE_TRIMMING {
DWRITE_TRIMMING_GRANULARITY granularity;
UINT32 delimiter;
UINT32 delimiterCount;
};
成员
- granularity
-
一个值,指定用于对溢出布局框的文本进行剪裁的文本粒度。
enum DWRITE_TRIMMING_GRANULARITY {
DWRITE_TRIMMING_GRANULARITY_NONE, //不进行任何剪裁。文本流超出布局宽度。
DWRITE_TRIMMING_GRANULARITY_CHARACTER, //在字符群集边界处进行剪裁
DWRITE_TRIMMING_GRANULARITY_WORD //在字边界处进行剪裁
}; - delimiter
-
一个字符代码,用作指示要保留的文本部分开头的分隔符。对路径省略号最有用,其中分隔符为斜杠。
- delimiterCount
-
一个值,指示要后退的分隔符数量。
(3)DWriteFactory::CreateEllipsisTrimmingSign()方法
此方法可以生成表示省略号的 IDWriteInlineObject(此方法得到的IDWriteInlineObject可以作为SetTrimming方法的第二个参数)。
二、实现字符串去尾效果
// 字体格式1:不使用去尾
if (SUCCEEDED(hr))
{
DWRITE_TRIMMING trim1;
IDWriteInlineObject* trim2 = NULL;
hr = m_pDWriteFactory->CreateTextFormat( L"Arial Black", NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 20.0, L"en-us",&m_pTF1); if (SUCCEEDED(hr))
{ // 换行模式(DWRITE_WORD_WRAPPING)设置为不换行
hr = m_pTF1->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
} if (SUCCEEDED(hr))
{
trim1.granularity = DWRITE_TRIMMING_GRANULARITY_NONE;
trim1.delimiter = ;
trim1.delimiterCount = ;
hr = m_pTF1->SetTrimming(&trim1,trim2);
}
}
// 字体格式2:以字符为单位去尾
if (SUCCEEDED(hr))
{
DWRITE_TRIMMING trim1;
IDWriteInlineObject* trim2 = NULL;
hr = m_pDWriteFactory->CreateTextFormat( L"Arial Black", NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 20.0, L"en-us",&m_pTF2); if (SUCCEEDED(hr))
{ // 换行模式(DWRITE_WORD_WRAPPING)设置为不换行
hr = m_pTF2->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
} if (SUCCEEDED(hr))
{
trim1.granularity = DWRITE_TRIMMING_GRANULARITY_CHARACTER;
trim1.delimiter = ;
trim1.delimiterCount = ;
hr = m_pTF2->SetTrimming(&trim1,trim2);
}
}
// 字体格式3:以单词为单位去尾
if (SUCCEEDED(hr))
{
DWRITE_TRIMMING trim1;
IDWriteInlineObject* trim2 = NULL;
hr = m_pDWriteFactory->CreateTextFormat( L"Arial Black", NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 20.0, L"en-us",&m_pTF3); if (SUCCEEDED(hr))
{ // 换行模式(DWRITE_WORD_WRAPPING)设置为不换行
hr = m_pTF3->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
} if (SUCCEEDED(hr))
{
trim1.granularity = DWRITE_TRIMMING_GRANULARITY_WORD;
trim1.delimiter = ;
trim1.delimiterCount = ;
hr = m_pTF3->SetTrimming(&trim1,trim2);
}
}
// 字体格式4:以字符为单位去尾,用省略号代替略去部分
if (SUCCEEDED(hr))
{
DWRITE_TRIMMING trim1;
IDWriteInlineObject* trim2 = NULL;
hr = m_pDWriteFactory->CreateTextFormat( L"Arial Black", NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 20.0, L"en-us",&m_pTF4); if (SUCCEEDED(hr))
{ // 换行模式(DWRITE_WORD_WRAPPING)设置为不换行
hr = m_pTF4->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
} if (SUCCEEDED(hr))
{ //
m_pDWriteFactory->CreateEllipsisTrimmingSign(m_pTF4,&trim2);
} if (SUCCEEDED(hr))
{
trim1.granularity = DWRITE_TRIMMING_GRANULARITY_CHARACTER;
trim1.delimiter = ;
trim1.delimiterCount = ;
hr = m_pTF4->SetTrimming(&trim1,trim2);
}
}
// 字体格式4:以字符为单位去尾,用省略号代替略去部分
if (SUCCEEDED(hr))
{
DWRITE_TRIMMING trim1;
IDWriteInlineObject* trim2 = NULL;
hr = m_pDWriteFactory->CreateTextFormat( L"Arial Black", NULL, DWRITE_FONT_WEIGHT_NORMAL,
DWRITE_FONT_STYLE_NORMAL, DWRITE_FONT_STRETCH_NORMAL, 20.0, L"en-us",&m_pTF4); if (SUCCEEDED(hr))
{ // 换行模式(DWRITE_WORD_WRAPPING)设置为不换行
hr = m_pTF4->SetWordWrapping(DWRITE_WORD_WRAPPING_NO_WRAP);
} if (SUCCEEDED(hr))
{
m_pDWriteFactory->CreateEllipsisTrimmingSign(m_pTF4,&trim2);
} if (SUCCEEDED(hr))
{
trim1.granularity = DWRITE_TRIMMING_GRANULARITY_CHARACTER;
trim1.delimiter = ;
trim1.delimiterCount = ;
hr = m_pTF4->SetTrimming(&trim1,trim2);
}
}


想看源码的朋友可以点击此处下载,Demo源码是Direct2DTests目录下的DWriteStringTrimming文件。
DirectWrite文字排版——字符串去尾的更多相关文章
- OpenJudge计算概论-文字排版
/*====================================================================== 文字排版 总时间限制: 1000ms 内存限制: 65 ...
- 【html】文字排版
Web开发过程中文字排版,默认的情况下,行末的长单词会撑开容器. 我们想要的是(像word一样.能够自动换行.既不撑大容器.也不强制拆开行末单词.并且不会隐藏行末单词的多余字母) ①不能撑开容器 ②完 ...
- iOS开发-UITextView文字排版
UITextView文本排版 1.配置NSMutableParagraphStyle NSMutableParagraphStyle *MParaStyle = [[NSMutableParagrap ...
- 题目1049:字符串去特定字符——九度OJ
题目1049:字符串去特定字符 http://ac.jobdu.com/problem.php?pid=1049 时间限制:1 秒 内存限制:32 兆 题目描述: 输入字符串s和字符c,要求去掉s中所 ...
- (转)iOS7界面设计规范(10) - UI基础 - 文字排版与配色
明天就是周四了.貌似前几天还在恨周一呢.话说今天几乎开了一整天的会,正经事情没做多少:这种感觉比一整天从早到晚12个小时的忙碌于一件事情还要让人感到疲惫的对叭?那今天的iOS7设计规范更新又是一篇很简 ...
- NSIS文字及字符串函数与头文件介绍
原文 NSIS文字及字符串函数与头文件介绍 文字函数,顾名思义就是处理字符串的函数.使用这些字符串函数前,必须先包含头文件WordFunc.nsh.该头文件目前包含如下一些函数:WordFind.Wo ...
- nefu 903 字符串去星
字符串去星 Problem : 903 Time Limit : 1000ms Memory Limit : 65536K description 有一个字符串(长度小于100),要统计其中有多少个* ...
- div介绍 盒子模型边框属性 CSS初始化 文字排版 边框调整 溢出
今天学习的div,了解了div是干什么用的掌握了什么是盒子模型,以及div的外边距内边距以及边框,运用div和CSS给文字排版,利用边框的来做图像,div溢出的处理 CSS初始化: 精确排版的时候用这 ...
- JS保留小数 去尾法 进一法 四舍五入法
//toFixed 四舍五入遇到坑. 1.235.toFixed(2) = 1.23 1.2350001.toFixed(2) = 1.24 //去尾法 Number.prototype.toFloo ...
随机推荐
- 单元测试 mock EF 中DbContext 和DbSet Include
现在EF越来越流行了,很多时候业务成都是直接访问DbContext 和DbSet来操作数据的. 那么我们测试的时候如何来mock这2个对象了?现在时间很晚了, 就直接贴code吧 首先看看的我们DbC ...
- depth and distance
1down votefavorite I'm implementing ominidirectional shadow mapping for point lights. I want to us ...
- Installing Oracle and ArcSDE on separate servers
http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#//002n0000000q000000
- ios app 提交评审注意事项
在网络上看到的一个文档是这样写,原文的出处无法确认了 基本要点 · 不能导致手机故障(比如崩溃或屏幕问题) · 长时间/过度使用之后反应仍然很快 · 应 ...
- 美行Thinkpad八通道快捷入口
美行Thinkpad八通道快捷入口 链接: http://shop.lenovo.com/perksoffer/us/en/laptops/thinkpad/?__followRobots=true打 ...
- 编程语言 IDE 对比
IDE是集成开发环境的英文缩写,所谓集成开发环境,就是将你在开发过程中所需要的工具或功能集成到了一起,比如代码编写.分析.编译.调试等功能,从而最大化地提高开发者的工作效率. 每种编程语言都有一些特定 ...
- wordpress自动截取文章摘要代码
想要实现 wordpress 首页显示摘要有几种方法: 第一种,可以在写文章的时侯在需要分割的地方加入<!–more–>标签,但在输出首页摘要的同时,也会使feed只显示摘要,不方便读者阅 ...
- [AX2012]Report data provider调试
运行使用RDP作为数据源的报表时,RDP类被编译成.NET的服务调用,RDP是X++的代码,它的调试是在MorphX调试器中完成.要在MorphX调试器中调试RDP的X++代码需要以下配置: 添加AO ...
- 如何将 Microsoft Bot Framework 链接至微信公共号
说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何 ...
- 看上去很美 国内CDN现状与美国对比
CDN的理想与现实 多年以前,当<Kingdom of Heaven>这部史诗电影发行的时候,中国的影迷使用电驴和BT来寻找种子,而那个时候,高清也才刚刚进入电影领域,我的同事不惜用自家的 ...