您现在的位置是: 软件 > 开发者网络 > 程序方舟 > 开发专栏 > Visual C++开发 > 正文
·速成电脑精英(包分配)白领高薪一族从这里开始



-Java套接字编程(下)
-MediaStudio Pro 6.5教程
-三款卸载软件最新试用
-基于Visual C++的Winsock API研究

在ComboBox中改变列表框的宽度
2002-03-07· ·贾旭滨(译) ··

  我们经常会使用到组合框,而组合框是是有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.列表框的值

■ 相关内容
 用VC实现桌面文字背景透明摆脱黑白
 如何在VC5下定制多媒体真彩封页
 在VC程序中加载GIF动画
 用VC++实现上网拨号功能
 在VC下显示JPEG、GIF格式图像的一种简便方法
 用VC制作非常酷的工具条
 用VC实现小型矢量图形系统的开发
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!