gdi,获取亚洲字符的宽度

时间:2018-06-12 14:52:58

标签: gdi cjk

        int dx[8];
        int fit;
        SIZE the_size;

        res = GetTextExtentExPointW(dc, L"WWWWWWWW", 8, -1, &fit, &dx[0], &the_size);

这有效,dx填充了数字7 14 21等。但是当我尝试对亚洲字符(如L"薔薇薔薇薔薇薔薇")执行相同操作时,此功能失败。我甚至为此创建了一个字体,它没有改变任何东西。

        HFONT hFont = CreateFont(14,
            0,
            0,
            0,
            FW_DONTCARE,
            FALSE, //fdwItalic
            FALSE, //fdwUnderline
            FALSE, //fdwStrikeOut
            SHIFTJIS_CHARSET,
            OUT_DEFAULT_PRECIS,
            CLIP_DEFAULT_PRECIS,
            NONANTIALIASED_QUALITY, 
            VARIABLE_PITCH,
            TEXT("MS PGothic"));

        if (hFont == NULL) FUCK();

        SelectObject(dc, hFont);

1 个答案:

答案 0 :(得分:0)

第四个参数应该是允许的最大宽度,而不是-1。请改用较大的值。检查以确保GetTextExtentExPointW成功。

if(GetTextExtentExPointW(dc, L"薔薇薔薇薔薇薔薇", 8, 1000, &fit, &dx[0], &the_size))
{
    ...
}

请注意,Unicode代码点可能需要4个字节,或者每个代码点需要2 wchar_t