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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度 ; w3 G1 S- ]" \  Q: l; R5 Q
( `0 G( C1 H4 l+ s- T: c
2002-03-07· ·贾旭滨(译) ·· 4 q# g9 U4 v" L( y( Y" l
$ P+ o. c! u3 U4 ^( J, d- c2 d

- c7 v; I, b  Y! X) ]1 W0 P  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。
5 v$ v: ~5 s" M* Q+ r$ o5 p1 P  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:
( q5 L& U. H; m7 J
; q: o: P. p. cHBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
' H: {) @* f' i5 W7 G{' B) i6 F- _. ^5 l6 D
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
3 G% R0 a$ w, z% {  K" |  switch (nctlcolor) {
/ g' U& k  v( f& I1 @9 [    case ctlcolor_edit:0 Q! o+ i8 r' Y; p4 G# ~5 c
    break;
1 G2 K) m- \2 c( j' Q# |) H   case ctlcolor_listbox:# m1 @) E) V+ w
    if (listwidth > 0) {
2 J  B( D! A; ^1 D. B5 f. r       // new width of a listbox is defined+ \6 V2 _( T7 e- c5 S# O1 d
       CRect rect;
* {/ g6 L1 \3 x3 v* i5 x6 y       pwnd->GetWindowRect(&rect);
" _7 W8 M# Q, Z( F" Y       if (rect.Width() != listwidth) {+ x7 k* P" d- x
        rect.right = rect.left + listwidth;) z) a! d  L6 L8 S
        pwnd->MoveWindow(&rect);6 R( }9 A0 W) o  q
       }
* K  Y$ Y4 s; u    }. t) A2 q! B. @# K1 c- @2 s: a
    break;
! h5 Y0 ~& i7 q: L   }& `. j; f3 C* m- e8 v2 F
9 I: h' t' B  B: D6 F
   // todo: return a different brush if the default is not desired' w' D  a% F6 J. C# I
   return hbr;& E$ m6 i& I0 a( A# Z) m- {
}2 T, S& |. c6 w, C
1 K6 I2 ~; v! h$ H! t( K  O

) b, E, C! I$ D% o) u; T  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
, _: }' m8 T% I6 j$ Z
' s% |9 X4 H" g$ z2 ]  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:$ M8 I1 w, @2 Y3 k- j) N4 v
- ]2 _+ @# e/ l) b, Z
CComboBox::SetDroppedWidth(int width);
$ _% G% T- ]8 E. S0 f0 B
4 i: G% ]  a% k/ j. l7 e  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   
* {4 w9 |) ~" n- c& P% ]( H$ ]( H1 v7 S
  1.你所设置的值(就是通过上面的函数所设置的值)
3 a7 z7 \' O; G" _3 R4 q9 W: A9 v' j0 p$ o0 F' G- D
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-8-15 11:51 , Processed in 0.017491 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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