DC(Device Context)在程序中,可以形象的理解为就是一块画布,在画画之前,你要选择好画笔,给画笔蘸上颜色,决定要写字还是画画等等,这些形象的比喻在 mfc 中都有对应的类去实现,大家可以参考下面两篇文章,本文只记录一些特殊的方法,方便以后翻阅查询:
MFC GDI绘图基础:http://blog.csdn.net/phunxm/article/details/5083119
关于设备描述表:http://blog.sina.com.cn/s/blog_5dbf4a610100ofzh.html
获取 DC 中字体信息
// 获取 DC 中字体的信息 TEXTMETRIC tm; hDC.GetTextMetrics(&tm);
TEXTMETRIC 是一个结构体,其中包含了在 DC 中字体的各种信息。如下:
typedef struct tagTEXTMETRICW { LONG tmHeight; // 字体高度 LONG tmAscent; LONG tmDescent; LONG tmInternalLeading; LONG tmExternalLeading; LONG tmAveCharWidth; LONG tmMaxCharWidth; LONG tmWeight; LONG tmOverhang; LONG tmDigitizedAspectX; LONG tmDigitizedAspectY; WCHAR tmFirstChar; WCHAR tmLastChar; WCHAR tmDefaultChar; WCHAR tmBreakChar; BYTE tmItalic; BYTE tmUnderlined; BYTE tmStruckOut; BYTE tmPitchAndFamily; BYTE tmCharSet; } TEXTMETRICW, *PTEXTMETRICW, NEAR *NPTEXTMETRICW, FAR *LPTEXTMETRICW;
每一个参数所代表的意义:https://msdn.microsoft.com/zh-cn/vstudio/dd145132(v=vs.90).aspx
获取 DC 背景色
// 获取 DC 的背景色 COLORREF color = hDC.GetBkColor(); // 设置 DC 绘制字体时的颜色与背景色一致 color = hDC.SetTextColor(color);
上面示例获取了 DC 的背景色以后有将背景色设置为字体颜色,这样写出来的字就与背景色一致了(看不到写出来的字)。
返回一个字符串在 DC 中的宽度
CSize size = hDC.GetTextExtent(m_str); // 返回的 size.cx 是长度 // 返回的 size.cy 是高度