-1

我正在尝试创建一种方法,以像素为单位提供字符串的宽度。到目前为止我的代码:

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

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

我该如何转换?

4

2 回答 2

3

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

于 2013-06-20T20:11:19.667 回答
2

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

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;
}
于 2013-06-21T21:11:54.247 回答