首页 > 解决方案 > 如何自动调整文本大小以适合矩形 winuser.h

问题描述

我在这里有这段代码来打印居中的文本:

const std::string a= "testddfvdfv dfvdf v";
const CHAR *c = a.c_str();
const RECT b[4] = {x1,y1,x2,y2};
DrawTextA(gui_out._hdc, c, a.size(), const_cast<LPRECT>(b), DT_SINGLELINE | DT_CENTER | DT_VCENTER);

它成功地将字符串 a 打印到矩形的中心(由 x1,x2,y1,y2 表示)。唯一的问题是文本很小并且不会根据矩形宽度和高度调整大小。有没有办法做到这一点,以便文本大小自动调整大小,使字符串适合矩形?谢谢

编辑:这是我设置字体的方式。是否有某种方法或算法来计算必要的字体大小以适应字符?

//Two methods for setting font and size
void SetTextSize(int NewFontSize)
{
    gui_out.FontSize = NewFontSize;
}
//---------------------------------------------------
void SetTextFont(string NewFontName)
{
    if (NewFontName == "Arial"
        || NewFontName == "System"
        || NewFontName == "Times New Roman"){
        gui_out.FontName = NewFontName;
        if (NewFontName == "Times New Roman")
            gui_out.FontFamily = FF_ROMAN;
        else
            gui_out.FontFamily = FF_SWISS;
        }
}

void DrawCenteredText(string S)
{
    SetTextColor(gui_out._hdc, RGB(gui_out.RedTextVal, gui_out.GreenTextVal, gui_out.BlueTextVal));
    HFONT hFont = CreateFont(gui_out.FontSize,0,0,0,FW_NORMAL,0,0,0,
            ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
            PROOF_QUALITY, gui_out.FontFamily | VARIABLE_PITCH, gui_out.FontName.c_str());
    HFONT hOldFont = HFONT(SelectObject(gui_out._hdc, hFont));
// Below for Visual C++
    POINT P;
    GetCurrentPositionEx(gui_out._hdc, &P);
    SetTextAlign(gui_out._hdc,TA_BASELINE | TA_CENTER | TA_UPDATECP);
    TextOut(gui_out._hdc,P.x,P.x,S.c_str(),S.length());
// Above for Visual C++

    /* This for Borland
    DWORD P = GetCurrentPosition(gui_out._hdc);
    SetTextAlign(gui_out._hdc,TA_BASELINE | TA_CENTER | TA_UPDATECP);
    TextOut(gui_out._hdc,LOWORD(P),HIWORD(P),S.c_str(),S.length());
    */
    SelectObject(gui_out._hdc, hOldFont);
    DeleteObject(hFont);
}

标签: c++windowsuser-interfacewinapi

解决方案


推荐阅读