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 是高度