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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度
; s2 N- V7 [3 G1 Z$ R
  o: n, n# \$ v6 }, F" n0 W2002-03-07· ·贾旭滨(译) ··
, A4 J& c( o' _: J% y8 H4 H; H9 o
  I$ d) m: V# r4 ]2 ?! m9 p! I. k' t2 Y; N
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。
8 B5 X, w8 }6 [9 w) |& i- a  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:( L! E" o$ V( P5 r. K
1 ?4 Q6 k, d1 j; g
HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 6 ?; C: F6 P+ M, O; o% \
{- b" z' X& k% J
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
' s8 a+ a5 B; V  switch (nctlcolor) {1 w2 V8 ~2 d2 `' m+ k
    case ctlcolor_edit:% R: d) t' C: v* p: d3 U& y
    break;; |6 [8 o( `% H5 T
   case ctlcolor_listbox:
) A3 K# G0 c- @5 _2 q    if (listwidth > 0) { 8 B7 c% g+ O' L" H1 @; H
       // new width of a listbox is defined
3 s* X. V( A; U       CRect rect;
8 k/ N0 C4 K4 i% h# U2 M       pwnd->GetWindowRect(&rect);4 g7 M/ P4 X4 o# u2 i% @, e
       if (rect.Width() != listwidth) {  F( p7 I0 b4 C* G
        rect.right = rect.left + listwidth;7 E. q0 q* M# h4 c) |- \
        pwnd->MoveWindow(&rect);0 v- e2 F% E+ |" [
       }
) I3 d7 E3 c2 M; _3 ]: j    }
# W1 T6 a  Z4 T& p) V* m6 s    break;
, v0 z5 W& ?1 i1 L6 K* ~   }/ b0 X4 T7 n6 [

( P0 P* E8 T! h8 n& q3 O3 |5 n   // todo: return a different brush if the default is not desired7 l( `$ `- \& w# f$ C4 G2 K
   return hbr;4 [( G+ h$ K. T. h# x* ~1 w
}) L' O9 y$ D4 A# O+ U
2 }7 ^1 j7 H6 T3 F
! j7 J9 R5 f* z: b5 N2 n: [
  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。) ]; G) V' Y4 \4 D8 l7 r

  P: @1 A! t8 D6 T# S& v1 M8 a  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:0 L0 ?/ B* d. O

4 u6 s+ x+ i1 E. yCComboBox::SetDroppedWidth(int width);
/ F8 a4 e/ i" Y: b7 O- Q: Y
" x' o% q0 V# D% b. U  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   # o1 \" I6 N. P6 }" B

4 R4 }  |% B  Z, |8 ]) [4 O  1.你所设置的值(就是通过上面的函数所设置的值)8 k) ^" P. j& u

" H  d& @: U& [0 u+ d' i% X  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-8-9 07:04 , Processed in 0.034339 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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