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
。
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
。