DC(Device Context)在程序中,可以形象的理解为就是一块画布,在画画之前,你要选择好画笔,给画笔蘸上颜色,决定要写字还是画画等等,这些形象的比喻在 mfc 中都有对应的类去实现,大家可以参考下面两篇文章,本文只记录一些特殊的方法,方便以后翻阅查询:
MFC GDI绘图基础:http://blog.csdn.net/phunxm/article/details/5083119 关于设备描述表:http://blog.sina.com.cn/s/blog_5dbf4a610100ofzh.html
获取 DC 中字体信息
代码语言:javascript复制// 获取 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 背景色
代码语言:javascript复制// 获取 DC 的背景色
COLORREF color = hDC.GetBkColor();
// 设置 DC 绘制字体时的颜色与背景色一致
color = hDC.SetTextColor(color);
上面示例获取了 DC 的背景色以后有将背景色设置为字体颜色,这样写出来的字就与背景色一致了(看不到写出来的字)。
返回一个字符串在 DC 中的宽度
代码语言:javascript复制CSize size = hDC.GetTextExtent(m_str);
// 返回的 size.cx 是长度
// 返回的 size.cy 是高度