Chinaunix首页 | 论坛 | 博客
  • 博客访问: 16497223
  • 博文数量: 5645
  • 博客积分: 9880
  • 博客等级: 中将
  • 技术积分: 68081
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-28 13:35
文章分类

全部博文(5645)

文章存档

2008年(5645)

我的朋友

分类:

2008-04-28 20:53:46

下载本文示例代码
  我们经常会使用到组合框,而组合框是是有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.列表框的值   我们经常会使用到组合框,而组合框是是有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.列表框的值 下载本文示例代码


在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度在ComboBox中改变列表框的宽度
阅读(167) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~