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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度
8 |' e0 f; K/ e/ O5 U5 {$ Z: v+ P( {; r8 m2 f8 W  |) C
2002-03-07· ·贾旭滨(译) ··
/ e9 H# d" w) D; ^6 C/ [" ]) L  H4 [- Q# y+ L( x
9 i5 t8 f! P- `& m6 b6 z- n
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 & C: i: d) y- U( G( T
  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:! t. _! U5 N; [" n+ d

* T3 K7 r/ Y7 e0 x6 S- O& ]HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 2 Z* c8 x9 k4 Y# ?( Y6 q
{, W# f8 Z9 F+ b' d& \# y0 K% c
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);1 Y* D8 E6 ~7 r# C
  switch (nctlcolor) {
9 _  {; X1 Q1 ~+ r3 t! u    case ctlcolor_edit:
& y& E1 u  d" \+ \    break;8 o8 D3 A! p/ t
   case ctlcolor_listbox:0 @% C* D0 S1 C
    if (listwidth > 0) {
4 H" P% R3 Z: U       // new width of a listbox is defined+ I7 K" M( O( z/ b+ S' {9 _" I! o% w
       CRect rect;
; T! @  o& D4 Y3 a( ?       pwnd->GetWindowRect(&rect);4 i, S" |6 S: T/ e/ n
       if (rect.Width() != listwidth) {
0 U$ z* z! [" H# m: D        rect.right = rect.left + listwidth;
0 N8 b7 z' w6 R5 r; V8 O# g        pwnd->MoveWindow(&rect);' Q; n; K% O' y5 G
       }% }$ w- _6 f. D/ s) F5 Y
    }
' K% z# q. q. L9 N3 E0 v6 z7 m    break;: H6 {9 t7 S4 z! j: H2 K
   }! ^3 l9 [7 `: L2 M' C

1 o, S& ^6 {  k' Q( K   // todo: return a different brush if the default is not desired9 c& N. W: j2 E6 ?
   return hbr;
, z1 f7 z& x2 f9 ^  P" m; C( j}
4 s7 h( h% y- h
* U$ c5 ~; M, a; E7 ^0 _9 L: u" E# E0 ^, P: f
  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
( u. \6 s" q6 P; K5 F
# _3 E- s6 v( P$ y  P. }  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:8 A/ C# t% ^7 q

0 }+ O3 H! R7 R' H9 R; N/ pCComboBox::SetDroppedWidth(int width);
& `' B* n7 L2 F: ?6 `) [) e7 i/ ?$ t8 D, \0 Z8 D# l$ k
  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   
+ {3 I' ]% o: T; T2 Y5 f$ m; [2 U' W
  1.你所设置的值(就是通过上面的函数所设置的值)9 n- h3 _& u) ^8 h1 }2 Z
6 A5 M# K) I$ }; M3 `& h, W2 ]
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 18:06 , Processed in 0.017976 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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