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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度 ; A: N0 R6 `8 p& F" |4 f5 Y
, N  V2 Q- y: L2 X) n
2002-03-07· ·贾旭滨(译) ··
8 I# R1 x0 i- T% I* [# Q8 k* T( w% I  {2 G' Z

4 X0 P) Y/ M3 F# |  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 : n% D4 ?7 s+ `8 [* M3 u/ b
  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:
0 ?! f# e* Z2 P7 _3 b* u' ?
, m. U* N; {8 T9 x' ]HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 9 L6 _! @5 z( Q5 ]. k8 Z
{# K: a2 E5 \" g9 b, \9 o
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);/ }6 B, x, t5 i1 u
  switch (nctlcolor) {- z7 k2 g( }# Q7 U8 l+ ?% S
    case ctlcolor_edit:
- F0 @2 d' c% e/ v: j& p  |+ F    break;
* G  Z+ n. M4 A# k   case ctlcolor_listbox:
" H+ a5 z" }# u% a    if (listwidth > 0) {
+ Y6 ~: T3 G) v( D$ P* b4 D       // new width of a listbox is defined0 B  q# t5 i; d  J7 |
       CRect rect;
) [% n: ]; ^- r/ {9 h; E2 }       pwnd->GetWindowRect(&rect);
* W; ], J5 D, ?       if (rect.Width() != listwidth) {  o4 h2 x3 ^3 G4 b1 Z9 p
        rect.right = rect.left + listwidth;2 b9 `: g6 t- {. U: H' u
        pwnd->MoveWindow(&rect);
+ J" d) z0 X- ~" D       }
5 O# ]1 t- d! v  h    }% W8 e. {2 K! k+ r  _" K
    break;
/ ~; V5 s# l+ ~9 ]+ W% Q   }: n: a1 G  R8 u/ j
6 o6 U6 I7 L. B8 G
   // todo: return a different brush if the default is not desired9 W/ K$ f7 F, F+ f  R
   return hbr;
! o. A2 Y4 c4 l1 }% m. N$ V}
* U' |8 j) R$ k4 M. ^* U
2 r( U# w1 W" U/ b. U" `4 Y% O
$ a( q  \- t5 @  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。. B+ v, X- u; o- j' g4 s

2 [1 X6 ~- `" O( k! H  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:
2 g0 P: t4 b/ a9 k* V
2 L6 |5 D9 I0 f' Z& ?CComboBox::SetDroppedWidth(int width);
, D* z# p4 E: G4 I: A/ `2 V7 x) ~2 W( f6 x
  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   
- J: @8 s0 A5 \& g# O
4 {9 c& c# |  {. O, [3 D  1.你所设置的值(就是通过上面的函数所设置的值)
& F3 I+ r# s1 Q4 t2 ?; g  c7 Y
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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