| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1573 人关注过本帖
标题:关于“按指定大小的区域自适应显示字符”问题
只看楼主 加入收藏
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:11
帖 子:126
专家分:244
注 册:2016-8-22
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:5 
关于“按指定大小的区域自适应显示字符”问题
问题模型描述:

现在已知有一个固定的区域
CRect rect;
rect.SetRect(left, top, right, bottom);


有一个字符串,该字符串可能较长,且由中文和字母组成,需要根据该区域进行字符串的显示,其问题点在于如何规范分割换行点,遇到需要分割换行时,区分汉字和字母,以确保不乱码;

目前需要一个函数能够实现此功能,希望得到答疑解惑:


程序代码:
/*绘制文本(以区域为基准):textcolor-文字颜色,bkcolor-背景色,left,top,right,bottom-区域,size-字体大小*/
void CDrawJM::DrawTextAboutRect(CDC *pDC, COLORREF textcolor, COLORREF bkcolor, CString m_strText, unsigned int left, unsigned int top, unsigned int right, unsigned int bottom, unsigned int size)
{
        CFont *oldFont;
    CFont m_textFont;
    m_textFont.CreateFont(size, 0, 0, 0, FW_BOLD, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS,
        CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS, _T("宋体"));   //size-字体大小
    oldFont = pDC->SelectObject(&m_textFont);
    pDC->SetTextColor(textcolor);   //设置字体颜色
    pDC->SetBkColor(bkcolor);   //设置字体背景色


        //该部分为实现区域自适应显示字符串功能代码,文字显示可使用库函数   pDC->TextOut(a,b,str);

        pDC->SelectObject(oldFont);
    m_textFont.DeleteObject();
}


[此贴子已经被作者于2019-11-26 18:13编辑过]

搜索更多相关主题的帖子: 显示 大小 unsigned int 区域 区域 int 显示 unsigned 大小 
2019-11-26 18:07
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:20 
用 DrawText 函数,注意最后一个参数
2019-11-26 18:22
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:11
帖 子:126
专家分:244
注 册:2016-8-22
收藏
得分:0 
回复 2楼 rjsp
可以了,但是输出的效果不太满意,最后一个参数有哪个属性是两侧对齐的,就是说前面的行左右边界相同,最后一行靠左,类似WPS里面的两侧对齐,现在的效果是这样的





图片附件: 游客没有浏览图片的权限,请 登录注册


[此贴子已经被作者于2019-11-26 21:35编辑过]


对待编程,要像对待情人一样
2019-11-26 21:25
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
回复 3楼 鸿蒙之灵
没有,
但你可以试试 最后一个参数加上DT_WORDBREAK | DT_EDITCONTROL的效果
2019-11-26 22:42
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:11
帖 子:126
专家分:244
注 册:2016-8-22
收藏
得分:0 
回复 4楼 rjsp
不行,还是右边对不齐,这个是不是用最后一个参数实现不了啊

对待编程,要像对待情人一样
2019-11-27 08:55
鸿蒙之灵
Rank: 4
来 自:异次元裂缝
等 级:贵宾
威 望:11
帖 子:126
专家分:244
注 册:2016-8-22
收藏
得分:0 
总结:该问题最终经过查找资料等途径,了解到MFC中无关于区域两端对齐输出字符串的样式,故该问题最终解决方案为:

1.先根据区域绘制等长等宽的背景矩形,因为该分割后右边最多差1.5个字符的位置(汉字两个字符位置),差距不会很大,故直接使用字体背景色会显得右边对不齐特别明显;

2.再设置文本背景色为透明,此时用到上面版主提供的GDI函数进行文本输出显示即可;

在此,感谢版主的热心解答!

对待编程,要像对待情人一样
2019-11-29 12:53
快速回复:关于“按指定大小的区域自适应显示字符”问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.032500 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved