QQ登录

只需一步,快速开始

69上位机VC MFC组合框自动调节宽度显示过长文本

[ 复制链接 ]

3.在主对话框中对我们自定义的类的使用:添加一组合框控件,关联一变量CAutoSizeCombo m_Combo;给此组合框 ...

3.在主对话框中对我们自定义的类的使用:添加一组合框控件,关联一变量CAutoSizeCombo	m_Combo;给此组合框  ...

69上位机VC MFC组合框自动调节宽度显示过长文本

功能展示

开发上位机时,我们会发再组合框的下拉列表宽度和组合框的相同,固定不可自动更改,在显示的文本过长时,文本就不能够全部显示出来,我们当前例程就自己动手实现根据文本长度,自动调节组合框内下拉列表框的长度,效果如图
要点提示

我们当前例程主要是通过组合框处理颜色时,添加调节下拉列表框宽度功能,也就是在OnCtlColor()函数中实现,实现过程中我们用了GetSystemMetrics()获取垂直滚动条宽度功能,用GetTextExtent()获取子项文本总长度功能;GetTextExtent()函数原型CSize GetTextExtent( const CString&str ) const;

参数只有一个,就是工获取长度的字符串,函数返回指定字符的长度;
实现功能
1.新建基于对话框的应用程序

2.从CComboBox类派生一个自定义类class CAutoSizeCombo : publicCComboBox;在处理控件颜色的函数OnCtlColor()中实现我们自动调节组合框宽度的功能
  1. HBRUSH CAutoSizeCombo::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
  2. {
  3.         HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
  4.         switch(nCtlColor)
  5.         {
  6.         case CTLCOLOR_EDIT://是编辑框时
  7.                 break;
  8.         case CTLCOLOR_LISTBOX://是组合框的列表框时
  9.                 int nItemNum=GetCount();
  10.                 int nWidth=0;
  11.                 CString strItem;
  12.                 CClientDC dc(this);
  13.                 int iSaveDC=dc.SaveDC();//获取DC
  14.                 dc.SelectObject(GetFont());//选择字体
  15.                 int iVSWidth=::GetSystemMetrics(SM_CXVSCROLL);//垂直滚动条宽度
  16.                 for(int i=0;i<nItemNum;i++)//获取每子项的长度,取最大值
  17.                 {
  18.                         GetLBText(i,strItem);//
  19.                         int iWholeWidth=dc.GetTextExtent(strItem).cx+iVSWidth;
  20.                         nWidth=max(nWidth,iWholeWidth);
  21.                 }
  22.                 nWidth+=dc.GetTextExtent("bb").cx;//额外添加点宽度
  23.                 dc.RestoreDC(iSaveDC);
复制代码
  1. if(nWidth>0)//重新设置窗口宽度
  2.                 {
  3.                         CRect rc;
  4.                         pWnd->GetWindowRect(&rc);
  5.                         if(rc.Width()!=nWidth)
  6.                         {
  7.                                 rc.right=rc.left+nWidth;
  8.                                 pWnd->MoveWindow(&rc);
  9.                         }
  10.                 }break;
  11.         }
  12.         return hbr;
  13. }
复制代码
3.在主对话框中对我们自定义的类的使用:添加一组合框控件,关联一变量CAutoSizeCombo  m_Combo;给此组合框变量添加些文字,查看效果m_Combo.AddString("a我有多长,你就可以看到多长,毫不保留全部展示");


我们来演示下功能实现的整个过程

请点击此处下载

请先注册会员后在进行下载

已注册会员,请先登录后下载

文件名称:69.上位机VC MFC组合框自动调节宽度显示过长文本.rar 
文件大小:136.46 KB  售价:10金币
下载权限: 不限 以上或 VIP会员   [购买捐助会员]   [充值积分]   有问题联系我

  

您的支持是我们创作的动力!  

  

您可花点闲钱积分自助任意充值

  

成为VIP会员 全站资源任意下载永久更新!


回复

使用道具 举报

点击查看
快速回复 返回列表 客服中心 搜索