在ComboBox中改变列表框的宽度

博客介绍了MFC中组合框列表框宽度调整的方法。可通过添加WM_CTLCOLOR消息句柄或使用CComboBox继承类添加代码实现,之后还需刷新列表框。此外,MFC的CComboBox类中的SetDroppedWidth函数也能实现同样功能,实际宽度取设置值和列表框值中的最大值。

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

    我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。

    为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:

HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 
{
     HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
     switch (nctlcolor) {
         case ctlcolor_edit:
         break;
     case ctlcolor_listbox:
         if (listwidth > 0) {             
             // new width of a listbox is defined
             CRect rect;
             pwnd->GetWindowRect(&rect);
             if (rect.Width() != listwidth) {
                 rect.right = rect.left + listwidth;
                 pwnd->MoveWindow(&rect);
             }
         }
         break;
     }

     // todo: return a different brush if the default is not desired
     return hbr;
 }

    这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。

    上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:

  CComboBox::SetDroppedWidth(int width);

    通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:

1.你所设置的值(就是通过上面的函数所设置的值)

2.列表框的值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值