找回密码
 注册
查看: 5267|回复: 0

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度
/ l( v' j' ~1 t! s7 K5 h$ j/ i2 j# b
2002-03-07· ·贾旭滨(译) ··
% u) b2 L2 @; u7 r& N
3 M; A& P# X( _& `4 X( ~% z9 i, u7 F$ t, o& l- _  l
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。
% }/ e2 N9 o  T+ f  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:
, l3 B' [2 R! M: h' x) H3 Y+ A; S5 H8 Q7 H
HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
: D1 P9 u: z# [0 e5 \3 A+ b{
4 Z% {/ j9 Q  ]) R* @  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);" ]: n$ y' o8 }" Q1 g. M# m" }$ C
  switch (nctlcolor) {. D- r* r4 _3 M# L$ _# h
    case ctlcolor_edit:
  R0 F; N% ?: P  h    break;
4 V' t; a8 V1 C4 t   case ctlcolor_listbox:
. E' ^/ }3 Z4 O4 W    if (listwidth > 0) {
: ~" f( |" p( C       // new width of a listbox is defined9 y4 h9 [3 x4 Q+ w  @: m& }
       CRect rect;7 r" w# ]% b! y1 `* j! B
       pwnd->GetWindowRect(&rect);
3 e/ S" G7 h6 Q0 M       if (rect.Width() != listwidth) {
5 H& d: e# G+ @, K3 R        rect.right = rect.left + listwidth;
2 ^# }8 f: Q( D" B5 u8 m2 h        pwnd->MoveWindow(&rect);! S- _7 c1 h4 Q9 c
       }( ?9 t0 u* [- B' n* e1 g2 \
    }
8 Z+ n  k  }& f( H    break;
" u0 T# A* r3 B( P/ I   }
0 \! k7 \; B! H0 }
9 x, E9 ]& P. n4 E# K. ]   // todo: return a different brush if the default is not desired6 M/ j( P' H# y! N  k- h
   return hbr;
) x+ a" ^# `% ^* M% t- E* T}
9 L# d7 d) c" y( y$ }5 O: q/ a+ K( f" a( S' H( h/ s: P  i

# t2 A9 Z6 C& H; j# p  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
* L* L$ a% A7 l1 u# W  n
4 {4 D% \6 I; i  N# }: M  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:
3 H6 g8 }; K- P  u6 w
& x* v5 U, c( {# u2 ~! xCComboBox::SetDroppedWidth(int width);
5 f3 A/ i4 J4 F9 J3 h# h
) t" d* l% t# r" i- {  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   
: F1 A/ i# H/ w8 O" @& B
* V1 }5 i7 x) Y9 O& A  1.你所设置的值(就是通过上面的函数所设置的值)
% N. h: w/ G) g# h7 m
* T2 M- @# c, A+ k& i  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 05:01 , Processed in 0.016347 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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