把界面上静态文本控件的尺寸根据文本的内容自动调整大小

本文介绍如何使用GetTextExtentPoint32函数自动调整Windows应用程序中静态文本控件的尺寸,确保文本完整显示且布局合理。通过获取字体、计算文本尺寸并调整控件大小,实现文本与控件的完美匹配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把界面上静态文本控件的尺寸根据文本的内容自动调整大小 

http://blog.youkuaiyun.com/hnhyhongmingjiang/archive/2008/08/27/2838738.aspx

 

函数功能:该函数计算指定的正文字符串的高度和宽度。
  
  函数原型:BOOL GetTextExtentPoint32(HDC hdc, LPCTSTR lpString, int cbString, LPSIZE lpSize);
  
  参数:
hdc:设备环境句柄。
  
  lpString:指向正文字符串的指针。此字符串不必以/0结束,因为cbString指定了字符串的长度。
  
  cbString:指向字符串中的字符数。
  
  lpSize:指向SIZE结构的指针,该结构中字符串的尺寸将被返回。
  
  返回值:如果函数调用成功,返回值是非零值,如果函数调用失败,返回值是0。
  
  Windows NT:若想获得更多的错误信息,请调用GetLastError函数。
  
  备注:GetTextExtentPoint32用当前所选字体来计算字符串尺寸,按逻辑单位计算的高和宽都没有考虑裁剪取的情况。
  
  由于有的设备紧缩字符,因此一个字符串里字符的范围之和或许不等于字符串的范围。
  
  计算的字符宽度考虑了由SetTextCharacterextra设备的字符间隔。


  GetTextExtentPoint32(hdc,szText,lstrlen(szText),&size);

   
       其中size.cx   ,size.cy   即所求.字符串的长度和高度(是像素),
  Windows CE环境下GetTextExtentPoint32与GetTextExtentPoint相同。

 

 

有一个步骤是必须的,就是取得主窗口的FONT,然后设置DC的FONT,然后再计算,这样才正确,参考下面的代码   
CStatic   *temp=(CStatic   *)GetDlgItem(IDC_STATIC1);   
  CRect   rect;   
  CSize   size(0,0);   
  temp->GetWindowRect(rect);   
  ScreenToClient(&rect);   
  CClientDC   dc(temp);   
  CFont   *pOldFont=dc.SelectObject(this->GetFont());   
  CString   str;   
  temp->GetWindowText(str);   
  if(::GetTextExtentPoint32((HDC)dc,str,str.GetLength(),&size))   
  {   
  rect.right=rect.left+size.cx;   
  rect.bottom=rect.top+size.cy;   
  }   
  else   
  temp->SetWindowText("GetTextExtentPoint32   fail   to   get   the   size   of   text!");   
  temp->MoveWindow(rect);   
  dc.SelectObject(pOldFont);  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值