找回密码
 注册
搜索
查看: 4864|回复: 0

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度
( H; f8 Z7 U8 m  ^# [; t; j- D+ p6 v; p$ I
2002-03-07· ·贾旭滨(译) ··
: |$ P3 `" \4 Y8 @, s- l
' G4 u6 |9 e* t7 E# o8 a2 s  d4 t- Z- ?2 x
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 ; k; ]0 N/ c3 X$ Y$ y7 M3 p7 G
  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:  o' A1 V% I# L1 |# }/ Y% F

/ V0 f2 i. z7 z& h  IHBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
0 C( K. Q5 z; g6 K9 z3 y0 N% `" _{; V) M3 O  m4 Q/ S+ R
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
+ z$ ~$ \7 t5 g& g  S  switch (nctlcolor) {* k9 s$ a: M# }4 l* M1 n5 _
    case ctlcolor_edit:
& I; e! G( C( [* h, u' `    break;1 r0 J; j2 B( Y' o& ^3 R
   case ctlcolor_listbox:
/ Q" t* R, o1 t    if (listwidth > 0) { 8 O( `. S# S( m. r$ P
       // new width of a listbox is defined; {5 Y* _  f% \
       CRect rect;
: [2 f5 f  P$ e* ?  D; L       pwnd->GetWindowRect(&rect);2 L; j! i6 u: f, s6 ~
       if (rect.Width() != listwidth) {% R- s& ]6 ?" Q+ H) P7 ^
        rect.right = rect.left + listwidth;( R. x5 O9 T& U* ~4 k* Z/ S4 n
        pwnd->MoveWindow(&rect);
/ j. c% A9 ]5 [  M       }
- Y& g$ ^- G$ L5 H0 [9 T    }
6 [9 o2 V; n! \; Y& d7 X: i% f- L    break;
$ M; j/ b" |3 |   }
: ]9 `6 s$ N4 G( c! }2 Z' c2 @6 P! p# u& {
   // todo: return a different brush if the default is not desired( @, I7 U9 d8 C" k( Q# x7 m5 g
   return hbr;
2 S& ^+ k3 q4 G/ y8 [}
9 p* T3 v# z$ F  o5 I! K# x- h; {+ }2 k( X, @
% O( F0 E$ D( I
  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。, O+ A4 \/ g0 W) X2 Q3 V

. s. ?* Q) y, z+ a$ ~, E  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:% x0 H- G* ^6 {! O
& J% z7 ]4 _' D- {! n" b
CComboBox::SetDroppedWidth(int width);
' v. M. T& I( \" |7 ~8 M) n' p, e! g% o" q0 R
  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   : d) I' W5 A- w0 w0 c7 R; d3 |7 ~

3 x5 _: [3 {& d- E7 G5 o5 u  1.你所设置的值(就是通过上面的函数所设置的值)
8 x# h! }# {$ x  j$ D% V4 \
- o; R# u  i8 ~  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|宁德市腾云网络科技有限公司 ( 闽ICP备2022007940号-5|闽公网安备 35092202000206号 )

GMT+8, 2025-9-30 11:16 , Processed in 0.037589 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表