工控编程吧
标题:
69上位机VC MFC组合框自动调节宽度显示过长文本
[打印本页]
作者:
qq263946146
时间:
2015-12-9 21:27
标题:
69上位机VC MFC组合框自动调节宽度显示过长文本
(, 下载次数: 1)
上传
点击文件名下载附件
69上位机VC MFC组合框自动调节宽度显示过长文本
功能展示
开发上位机时,我们会发再组合框的下拉列表宽度和组合框的相同,固定不可自动更改,在显示的文本过长时,文本就不能够全部显示出来,我们当前例程就自己动手实现根据文本长度,自动调节组合框内下拉列表框的长度,效果如图
要点提示
我们当前例程主要是通过组合框处理颜色时,添加调节下拉列表框宽度功能,也就是在OnCtlColor()函数中实现,实现过程中我们用了GetSystemMetrics()获取垂直滚动条宽度功能,用GetTextExtent()获取子项文本总长度功能;GetTextExtent()函数原型CSize GetTextExtent( const CString&str ) const;
参数只有一个,就是工获取长度的字符串,函数返回指定字符的长度;
实现功能
1.新建基于对话框的应用程序
2.从CComboBox类派生一个自定义类class CAutoSizeCombo : publicCComboBox;在处理控件颜色的函数OnCtlColor()中实现我们自动调节组合框宽度的功能
HBRUSH CAutoSizeCombo::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
switch(nCtlColor)
{
case CTLCOLOR_EDIT://是编辑框时
break;
case CTLCOLOR_LISTBOX://是组合框的列表框时
int nItemNum=GetCount();
int nWidth=0;
CString strItem;
CClientDC dc(this);
int iSaveDC=dc.SaveDC();//获取DC
dc.SelectObject(GetFont());//选择字体
int iVSWidth=::GetSystemMetrics(SM_CXVSCROLL);//垂直滚动条宽度
for(int i=0;i<nItemNum;i++)//获取每子项的长度,取最大值
{
GetLBText(i,strItem);//
int iWholeWidth=dc.GetTextExtent(strItem).cx+iVSWidth;
nWidth=max(nWidth,iWholeWidth);
}
nWidth+=dc.GetTextExtent("bb").cx;//额外添加点宽度
dc.RestoreDC(iSaveDC);
复制代码
if(nWidth>0)//重新设置窗口宽度
{
CRect rc;
pWnd->GetWindowRect(&rc);
if(rc.Width()!=nWidth)
{
rc.right=rc.left+nWidth;
pWnd->MoveWindow(&rc);
}
}break;
}
return hbr;
}
复制代码
3.在主对话框中对我们自定义的类的使用:添加一组合框控件,关联一变量CAutoSizeCombo m_Combo;给此组合框变量添加些文字,查看效果m_Combo.AddString("a我有多长,你就可以看到多长,毫不保留全部展示");
我们来演示下功能实现的整个过程
[iqiyi]http://player.video.qiyi.com/603a28166118bb15439640a6beb64910/0/382/w_19rt6va1hp.swf-albumId=5003111009-tvId=5003111009-isPurchase=0-cnId=12[/iqiyi]
(, 下载次数: 0)
上传
点击文件名下载附件
[note]1[/note]
欢迎光临 工控编程吧 (https://www.gkbc8.com/)
Powered by Discuz! X3.4