GetTextExtentPoint32返回带有特定字符的错误宽度

时间:2019-07-09 15:03:59

标签: c++ winapi width device-context

我试图在C ++上使用GetTextExtentPoint32来获取某些字符的宽度,一次一次。但是,该函数对于特殊字符(例如0x14)返回错误的结果,通常是使用ExtTextOut在屏幕上打印的字符大小的一半。这是一个示例:

HDC hdc = GetDC(hWnd);    
SelectObject(hdc,font);    
SIZE sz;     
char c=0x14;    
GetTextExtentPoint32(hdc,&c,1,&sz); //function returns sz.cx equal to 3 instead of 6

GetCharWidth32也发生了同样的事情:

int result;    
GetCharWidth32(hdc,0x14,0x14,&result); //result equals to 3, while the character on screen is 6px wide

任何提示我的错误在哪里?预先谢谢你。

编辑:对于所有小于32的ASCII字符,GetTextExtentPoint32似乎发现不正确的宽度。我发现带有DT_CALCRECT标志的DrawText可以很好地计算所有字符。唯一的缺点是DrawText比GetTextExtentPoint32消耗更多的CPU。

HDC hdc=GetDC(hWnd);
RECT rect;
rect.left=0; rect.top=0;
DrawText(hdc,"\x14",1,&rect,DT_CALCRECT); //rect.right = character width

0 个答案:

没有答案