MFC-DrawText在指定的矩形里写入格式化的文本

发布时间 2023-04-16 16:05:49作者: 天子骄龙

 

    
    HDC hdc = ::GetDC(m_hWnd);
    LOGFONT lf = { 0 };
    lf.lfWeight = 16; //平均宽度
    lf.lfHeight = 40;//字体高度
    lf.lfCharSet = GB2312_CHARSET;
    HFONT hfont = ::CreateFontIndirect(&lf);
    HFONT holdfont= (HFONT)SelectObject(hdc, hfont);
    
    RECT rect = { 50,50,400,400 };
    int n=DrawText(hdc,_T("GDI测试"),-1,&rect,DT_LEFT);//在指定的矩形里写入格式化的文本
    /*
    参数1:HDC hDC   设备描述表句柄
    参数2:LPCTSTR lpString  指向将被写入的字符串的指针,如果参数nCount是-1,则字符串必须是以\0结束的。 
                如果uFormat包含DT_MODIFYSTRING,则函数可为此字符串增加4个字符,存放字符串的缓冲区必须足够大,能容纳附加的字符
    参数3:int nCount  指向字符串中的字符数。如果nCount为-1,则lpString指向的字符串被认为是以\0结束的,DrawText会自动计算字符数
    参数4:LPRECT lpRect  指向结构RECT的指针,其中包含文本将被置于其中的矩形的信息(按逻辑坐标)
    参数5:UINT uFormat  指定格式化文本的方法。它可以下列值的任意组合
                DT_CALCRECT:这个参数比较重要,可以使DrawText函数计算出输出文本的尺寸。
                    如果输出文本有多行,DrawText函数使用lpRect定义的矩形的宽度,并扩展矩形的底部以容纳输出文本的最后一行
                    如果输出文本只有一行,则DrawText函数改变矩形的右边界,以容纳下正文行的最后一个字符
                    出现上述任何一种情况,DrawText函数将返回格式化文本的高度,而不是绘制文本
                DT_CENTER:指定文本水平居中显示
                DT_VCENTER:指定文本垂直居中显示。该标记只在单行文本输出时有效,所以它必须与DT_SINGLELINE结合使用
                DT_SINGLELINE:单行显示文本,回车和换行符都不断行
                DT_BOTTOM    使文本对齐到矩形底部。 此值仅用于DT_SINGLELINE值
                DT_LEFT      将文本对齐到左侧
                DT_RIGHT      将文本对齐到右侧
                DT_TOP       将文本对齐到矩形的顶部
                我只写了常用的,其余的看:https://learn.microsoft.com/zh-cn/windows/win32/api/winuser/nf-winuser-drawtext 
    返回值:如果函数成功,则返回值是逻辑单元中文本的高度。 
            如果指定了DT_VCENTER或DT_BOTTOM,则返回值是绘制文本底部的偏移量lpRect->top
            如果函数失败,则返回值为零
    
    */


    SelectObject(hdc, holdfont);
    DeleteObject(hfont);