自绘的CStatic控件自动换行

本文介绍了一种使用MFC实现控件自动换行的方法,包括根据界面控件大小自动换行及按指定文本长度换行,并调整控件宽度。

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

关键是DT_WORDBREAK这个属性。

 

  1. void   CAutoLineStatic::OnPaint()      
  2.   {    
  3.   CPaintDC   dc(this);   //   device   context   for   painting    
  4.      
  5.   //   TODO:   Add   your   message   handler   code   here    
  6.   /*   
  7.   //下面7行代码是根据界面中控件的大小自动换行的   
  8.   CRect   rect;   
  9.   this->GetWindowRect(&rect);   
  10.   ScreenToClient(&rect);   
  11.   CString   str;   
  12.   this->GetWindowText(str);   
  13.   dc.DrawText(str,   rect,DT_EDITCONTROL|DT_WORDBREAK);   
  14.   return;   
  15.   */    
  16.      
  17.   //下面代码则是根据用户指定文本长度自动换行,如15个全角字符长度    
  18.   //并把界面中控件的宽度自动调整到合适的大小    
  19.   CRect   rect;    
  20.   CSize   size(0,0);    
  21.      
  22.   this->GetWindowRect(rect);    
  23.   GetParent()->ScreenToClient(&rect);    
  24.   //随便15个全角字符,以便计算长度,这里是15个全角的空格    
  25.   CString   str="               ";        
  26.   CFont   *pOldFont=dc.SelectObject(GetParent()->GetFont());    
  27.   ::GetTextExtentPoint32((HDC)dc,str,str.GetLength(),&size);    
  28.   rect.right=rect.left+size.cx;    
  29.   this->MoveWindow(rect);    
  30.   rect.right-=rect.left;    
  31.   rect.bottom-=rect.top;    
  32.   rect.left=0;    
  33.   rect.top=0;    
  34.   this->GetWindowText(str);    
  35.   dc.DrawText(str,rect,DT_EDITCONTROL|DT_WORDBREAK);    
  36.   dc.SelectObject(pOldFont);    
  37.      
  38.   //   Do   not   call   CStatic::OnPaint()   for   painting   messages    
  39.   }     

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值