Winapi以字母为单位获取字符串宽度

时间:2013-06-20 20:06:58

标签: c++ winapi type-conversion gdi

我正在尝试创建一个方法,以字母为单位给出字符串的宽度。 到目前为止我的代码:

inline void getTextWidth(HWND hwnd char* text) {
    SIZE textSize;
    GetTextExtentPoint32(GetDC(hwnd), text, strlen(text), &textSize);
    return ?;
}

我知道我应该使用LPtoDPMSDN),但希望点作为参数,而不是GetTextExtentPoint32返回的SIZE。

如何转换此内容?

2 个答案:

答案 0 :(得分:3)

SIZE结构包含高度和宽度。由于您只关心宽度,因此您显然需要LPtoDP(textSize.cx);

答案 1 :(得分:0)

我用另一种方法解决了它。对于所有感兴趣的人,这是我的解决方案:

int getStringWidth(char *text, HFONT font) {
    HDC dc = GetDC(NULL);
    SelectObject(dc, font);

    RECT rect = { 0, 0, 0, 0 };
    DrawText(dc, text, strlen(text), &rect, DT_CALCRECT | DT_NOPREFIX | DT_SINGLELINE);
    int textWidth = abs(rect.right - rect.left);

    DeleteDC(dc);
    return textWidth;
}