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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度
' t9 ]' }) P1 y; o' k
8 F  T3 c9 J$ L+ H+ g- V9 O+ ^: K' Y2002-03-07· ·贾旭滨(译) ··
" G; U  i7 d0 e' K3 g9 r; [+ @0 c  q" x3 b9 g- W
0 N3 x4 [! R2 l; \. c
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。
' M. |/ n/ F3 ~& x  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:5 X) L7 v) ~6 N! y9 P
6 {, f; x% O! C6 l
HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) & b" ]( P# i% W# C
{$ Y& m" f; {- V3 D) m0 P
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
1 S$ C4 S9 S' Y9 |% @" M4 |  switch (nctlcolor) {( _7 }$ q5 j) A% y; P. l
    case ctlcolor_edit:
0 w  g  H4 G. G: p    break;
9 I3 G* H( B/ _& m4 N' q! u8 t   case ctlcolor_listbox:
# L. r$ s% s/ ~/ G' g" V+ j    if (listwidth > 0) { 6 J8 n& p9 Y/ @
       // new width of a listbox is defined
  s9 W1 x/ w* g+ h$ O       CRect rect;6 ?8 h2 ^0 v  X( C( G/ ]* b
       pwnd->GetWindowRect(&rect);
( y6 ~# Z2 @3 Q       if (rect.Width() != listwidth) {/ b8 r9 E, W) V
        rect.right = rect.left + listwidth;# `7 _+ g) g$ ]/ @4 p
        pwnd->MoveWindow(&rect);8 X" T8 a" [5 X" n
       }
! V- R( a0 M- r% {! C    }  h! p& _' v2 B( `
    break;
8 B( |- M3 h2 y, F/ @5 N   }' `& J$ E) ^! B! n' Z

! u" q4 b5 t( H1 L) B   // todo: return a different brush if the default is not desired4 F% u# z  y( f$ f+ N- e$ {
   return hbr;
0 o* d2 E7 a. }- f}
# j0 }5 p4 W' n* ~1 r1 E! ~# ]5 F- x5 |  [
' q0 C; z- t+ `& I
  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
9 n' b- r7 _; p
% ~  @" y! i# m% f; X+ {. Y) e  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:$ \7 ^; E. R2 ^
6 A$ X* S! a6 G+ C
CComboBox::SetDroppedWidth(int width);
  h* P9 T8 }) W: E. T/ I2 E+ H5 h6 v8 C' d, _7 R/ |( m0 \5 R
  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   ! F/ h. R- m. S: y
) ^$ c; q! k9 ]3 v: x9 B
  1.你所设置的值(就是通过上面的函数所设置的值)$ S7 {8 H" ~1 _2 T. V
9 H4 w0 v1 S  ~. d8 {' K9 k
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-12-30 00:20 , Processed in 0.019820 second(s), 14 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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