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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度 + j0 w, a: U9 N6 X" D
) m  j( \5 G4 t3 L$ g
2002-03-07· ·贾旭滨(译) ·· 0 G, P2 v" b! Z0 z3 z5 O8 [" P: d
, p1 j4 C* F8 f" ~- {$ s" N6 w

) Y4 O! D5 J. \7 Y/ L  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。
, G7 B1 U. W/ T  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:. Z" w) Z8 z9 J7 i% y
8 {7 `9 r! d$ G! d  o
HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
# M* s1 F7 y! V* C  N* P{2 s% J- M" ^* C2 i. g
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
" g, D9 V1 E7 C' f8 C8 a' E" z! J' a  switch (nctlcolor) {
: W4 N1 V* ~5 L" S    case ctlcolor_edit:0 @- Z( |/ N! T3 N! ], x
    break;# H; u. q0 T4 N: [- \
   case ctlcolor_listbox:* m. A9 b4 z! ?- J9 B, @
    if (listwidth > 0) {
: N" h8 `$ Z' r6 r% S! h0 H       // new width of a listbox is defined4 v/ _  [' s/ @, m, s
       CRect rect;
! |( p! n4 `. x" K. \4 W' s       pwnd->GetWindowRect(&rect);
0 b0 H0 K) p. i" x( ~; d       if (rect.Width() != listwidth) {8 G3 r6 ~4 m& b: U
        rect.right = rect.left + listwidth;' t4 V  r9 \1 K& a5 R) k
        pwnd->MoveWindow(&rect);. _% ^9 y3 @1 ^
       }
, H' c& D' C/ [3 d3 j( O) [    }
  f1 u% s7 A$ d# l    break;
) v% M. a( I/ |1 R, p   }6 u7 H$ j& U, d

; ?' f7 A1 I! Z, Z$ R# {+ d" \$ @   // todo: return a different brush if the default is not desired
2 K, B4 L6 O$ ^1 _% S  |% P   return hbr;
1 a+ v# _$ r% x& J8 O. z}/ r( T- n4 A! G6 t' ]8 x/ T: o

# F! c7 X: k0 e2 h2 _- h/ \/ W5 O) c; a9 d0 L- N  O: Q3 ?5 M) X- Y
  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
( O5 V% x% ~- C4 R: s4 d% N  X: ]
  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:/ u: g3 U. I" j
# m! j) x% v) D
CComboBox::SetDroppedWidth(int width); 1 [) X  ?4 a0 A: ^
. k: ?; L1 B' t6 X
  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   6 o1 u. K; |$ R- t  M" o5 i
- E: A* q: E. w8 S
  1.你所设置的值(就是通过上面的函数所设置的值)
! r0 {+ f# G8 _6 c! z, T' I, o+ @8 m0 m, z5 A
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-5-2 10:18 , Processed in 0.017156 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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