为什么GetTextExtentPoint调用之前要给DC设置字体它在会准确计算呢?

softrain 2005-08-01 11:24:28
难道默认字体它就计算错误了?
MSDN上并没有提到设置字体的问题啊。请大家给个合理的解释。
...全文
201 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
softrain 2005-08-02
  • 打赏
  • 举报
回复
原来是这样,谢谢各位。
吹泡泡的小猫 2005-08-01
  • 打赏
  • 举报
回复
Windows使用的字体不是标准宽度的,所以,同一个字符串使用不同的字体总的宽度可不一样
goodboyws 2005-08-01
  • 打赏
  • 举报
回复
不同地方的默认字体不一定一样
thisisll 2005-08-01
  • 打赏
  • 举报
回复
你不设置字体
那个参数传什么进去?
softrain 2005-08-01
  • 打赏
  • 举报
回复
如果我不设置字体,它是不是用默认字体计算?
如果是,为什么用默认字体输出文本,实际输出的长度要比计算出来的宽度小很多呢?
thisisll 2005-08-01
  • 打赏
  • 举报
回复
The GetTextExtentPoint function uses the currently selected font to compute the dimensions of the string.
说了啊
goodboyws 2005-08-01
  • 打赏
  • 举报
回复
HDC dc= GetDC( hWndBackGround_ ) ;
不等于菜单自绘时DrawItem传进来的DC,明白?
softrain 2005-08-01
  • 打赏
  • 举报
回复
我一开始这样没有设置字体:
HDC dc= GetDC( hWndBackGround_ ) ;
SIZE sz;
GetTextExtentPoint(dc,pItem->ch,strlen(pItem->ch),&sz);
ReleaseDC( 0, dc );
MSItem->itemWidth= sz.cx;
MSItem->itemHeight= sz.cy + 2;
菜单字体输出时右边会留一大片空地。

后来改正这样:
LOGFONT lf;
memset(&lf,0,sizeof(LOGFONT));
strcpy(lf.lfFaceName, "宋体");
lf.lfHeight = 12;
HFONT hfont = CreateFontIndirect(&lf);
HDC dc= GetDC( hWndBackGround_ ) ;
HFONT hold = (HFONT)SelectObject(dc,hfont);
SIZE sz;
GetTextExtentPoint(dc,pItem->ch,strlen(pItem->ch),&sz);
ReleaseDC( 0, dc );
MSItem->itemWidth = sz.cx +10;
MSItem->itemHeight = sz.cy + 4;
DeleteObject(SelectObject(dc,hold));
这样菜单在文字输出时宽度就刚好了。

为什么用系统默认的字体计算宽度,再用系统默认字体输出宽度会不同,
而我用宋体计算宽度用系统默认字体输出就刚刚好?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧