VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 752|回复: 2

[求助] windows程序设计大神进

[复制链接]
01_avatar_middle
online_vip 发表于 2016-7-22 15:11:14 | 显示全部楼层 |阅读模式
3驿站币
dc.TextOut(0, 50, "宋体");
dc.SetMapMode (MM_LOENGLISH);
dc.TextOut(0, -50, "宋体");
dc.SetMapMode(MM_ANISOTROPIC);
dc.SetWindowExt(24, 24);
dc.SetViewportExt(96, 96);
dc.TextOut(0, 100, "宋体");
为什么输出的字长度都差不多,但是宽度不一样呢,是不是SetMapMode对TextOut有影响?如果是有影响的话,那为什么将汉字换成数字或字母,那输出的字大小又是一样的。请高手帮我解答。





上一篇:网络编程_爬虫
下一篇:文件选择对话框多选时,如何才能选择的文件自动添加到ListCtrl控件中
51_avatar_middle
online_admins 发表于 2016-7-22 17:09:56 | 显示全部楼层
刚一朋友找我聊天说了这个问题,我把他的意思贴上来吧!

情况确实是这样,两次 dc.TextOut(0, 50, "宋体"); 的结果不同,确实是 dc.SetMapMode (MM_LOENGLISH); 影响的,因为映射方式不同了,所以宽度上就有变化。
不过改成数字或者英文之后,表面上看宽度又近似一致,这个可能就是 TextOut 底层的实现问题了。

使用这个测试代码:
CSize text_size = pDc->GetTextExtent(_T("abcdefghijklmn"));
pDc->SetMapMode(MM_LOENGLISH);
text_size = pDc->GetTextExtent(_T("abcdefghijklmn"));

两次得到的 text_size 宽度和高度已经不一样了,所以,即使是英文也是会产生宽度不同的情况。
只不过最后 TextOut 的时候结果表现就是当前这种情况了。

希望对楼主有帮助吧!
01_avatar_middle
ico_lz  楼主| 发表于 2016-7-22 18:00:39 | 显示全部楼层
Syc 发表于 2016-7-22 17:09
刚一朋友找我聊天说了这个问题,我把他的意思贴上来吧!

情况确实是这样,两次 dc.TextOut(0, 50, "宋体 ...

你好:
       首先我想问一下的是dc.SetMapMode (MM_LOENGLISH); 有影响的话为什么只有宽度上有变化,高度上没有变化。还有就是
CSize text_size = pDc->GetTextExtent(_T("abcdefghijklmn"));
pDc->SetMapMode(MM_LOENGLISH);
text_size = pDc->GetTextExtent(_T("abcdefghijklmn"));
这个返回的是逻辑上的值,所以不能说宽度发生了变化。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-6-18 11:47

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表