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 ...
随机推荐
- 配置editplus,讓其支持代碼自動格式化功能.
使用editplus已經好多年了,累積了不少的東西,想換IDE比較麻煩,所以就研究了一下用editplus搭配gofmt.exe配置go語言代碼自動格式化的功能.還好功夫不負有心人,終於被我搞懂了,不 ...
- 转:XBMC源代码分析
1:整体结构以及编译方法 XBMC(全称是XBOX Media Center)是一个开源的媒体中心软件.XBMC最初为Xbox而开发,可以运行在Linux.OSX.Windows.Android4.0 ...
- windows10 qt5 mingw32编译cryptopp563
windows10 qt5 mingw32编译cryptopp563 参考链接: http://www.qtcentre.org/threads/28809-Compiling-amp-using-C ...
- Docker实践(5)—资源隔离
Docker使用cgroup实现CPU,内存和磁盘IO等系统资源的限制. CPU Docker现在有2个与CPU资源相关的参数,-c可以指定CPU的占比,--cpuset可以绑定CPU.例如,指定容器 ...
- 关于Domino数据库的软删除
在Domino的数据库属性的 “高级” 附签(选择文件->数据库->属性),选中“允许软删除”,这样我们就启用了软删除功能,当一个文档没有删除的时候我们可以使用NotesDatabase的 ...
- 最近的shell脚本(updating)
1.批量替换 sed -i 's/class="table"/class="table table-hover"/g' `grep 'class="t ...
- [转] IE6中请求莫名中断
这两天碰到的问题,IE6下某个js生成的a节点,设置了href="javascript:;",点击时触一个ajax请求,但在IE6下就是无法执行succese里的内容,所以就用se ...
- ADT公司G729 方案指标
ADT公司G729 方案指标 G.729 Voice Compression Algorithm and its many annexes G.729 is used in wireless voic ...
- 使用Ant编译提示Class not found: javac1.8
无论是使用Eclipse还是使用Ant命令,都可能会在编译时遇到提示:Class not found: javac1.8 今天用Ant打包Android,apk,运行出现了batch_build.xm ...
- 小数量宽带用户的福音,Panabit 云计费easyradius 接口隆重发布,PA宽带计费系统
PA接口在早前就发布了,但是一直迟迟没有发布官方说明文档,由于最近问的客户较多,特写了这篇文档 由于PA使用标准radius认证协议,所以用户需要在本地搭建一个计费,由于大部分用户的数量只有几百个,不 ...