mfc 中利用设备描述表(dc)绘制图案

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

 

评论