动态调整TextOut输出文本的大小
问题背景:
在开发调试截面时,想要在MFC上用textout输出对应的文本,且可以通过滚轮动态放大缩小文字;
问题:
发现通过大部分博主介绍的方法无法实现,该有的功能;
原因:
大部分博主给的方法都是直接动过,CDC或CPaintDC,调用相应的函数如下:
//设置字体
CFont font;
font.CreateFont( 13, // 字体的高度
0, // 字体的宽度
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("宋体"));
dc.SelectObject(&font);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255, 0, 0));
dc.TextOut(40/*起始x坐标*/, rcClient.Height() - 25/*起始y坐标*/, _T("版本号:V1.0.0")/*需要显示的文字*/);
dc可以是CDC对象也可以是CPaintDC对象(已尝试),但实际情况中我所拥有的就只有HDC,(CDC的属性、句柄),在只有HDC的情况下调用以上的函数你会发现那些函数都能找到,且只需要把HDC,放入对应函数的参数内不会报错,就以为完美了,编译没错运行没错,就是没有动态改变大小。
经过分析尝试需要通过HDC找到对应的CDC再调用以上的函数即可实现对应的功能。
具体的代码如下:
//设置字体
auto dc = CDC::FromHandle(hdc); //假设hdc已知
CFont font;
font.CreateFont( 13, // 字体的高度
0, // 字体的宽度
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
_T("宋体"));
dc.SelectObject(&font);
dc.SetBkMode(TRANSPARENT);
dc.SetTextColor(RGB(255, 0, 0));
dc.TextOut(40/*起始x坐标*/, rcClient.Height() - 25/*起始y坐标*/, _T("版本号:V1.0.0")/*需要显示的文字*/);
注意:暂没有深入研究具体的DC之间的关系,若有同类问题可希望有所帮助。