读书人

分辨率变化时怎么使输出字体大小显示

发布时间: 2013-11-12 12:10:37 作者: rapoo

分辨率变化时,如何使输出字体大小显示不变?
在1024 x 768的分辨率情况下设置CreateFont中的nWidth = 0,输出的字体在3072 x 768分辨率的情况下,字体会被拉宽,求助怎样设置,才能使字体不会被拉宽。 字体 CreateFont TextOut?
[解决办法]
建议定义一个全局字体,该字体在创建时和dpi成反比,如下:


// 默认文本字体创建
HDC hDC = GetDC( NULL );
LOGFONT ft;
DWORD dwXDpi = GetDeviceCaps( hDC, LOGPIXELSY ); // 获取当前dpi值
DWORD dwTextPointSize = 9;
if ( dwXDpi != 0)
{
dwTextPointSize /= ( dwXDpi/96.0 ); // 字体大小与当前dpi值成反比
}
memset( &ft, 0, sizeof(LOGFONT) );
ft.lfHeight = -MulDiv ( dwTextPointSize, GetDeviceCaps ( hDC, LOGPIXELSY ), 72 );
ft.lfWidth = ft.lfHeight/2;
ft.lfOutPrecision = OUT_STRING_PRECIS;
ft.lfQuality = CLEARTYPE_QUALITY;
ft.lfWeight = FW_NORMAL;
_tcscpy( ft.lfFaceName, _T("微软雅黑") );
m_tDefaultTextFont.CreateFontIndirect( &ft );

[解决办法]
我们也遇到程序在大dpi值下显示异常的问题(显示不全),采取的办法是字体大小固定,并将控件大小固定

读书人网 >VC/MFC

热点推荐