gdi,获取亚洲字符的宽度

gdi, get width of asian characters

        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。请改用较大的值。检查以确保 GetTextExtentExPointW 成功。

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

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