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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度
! g- {* m) ~& P8 ~: B  [1 Q
  G7 W0 e* u5 ?; V2002-03-07· ·贾旭滨(译) ·· 4 v$ H7 f! Q* L- l$ ]" X1 Z
' I" _+ `$ a  e/ S2 B4 x8 e5 [
3 b" P, L1 e$ D" m" J& y0 s6 I9 }
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 ! J' V. I, E- j  K% ~0 X. T
  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:
1 G2 i5 ~+ S+ s: W7 A" N; D: i6 R/ F+ {  o+ [7 I  c8 m
HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 7 m  P. J' \  Q4 V; ~  o" R
{6 ?8 e3 `! i/ O/ U$ F* K
  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
8 @  c7 f, P9 f, u3 [! ]  switch (nctlcolor) {# ]: o' }. x, \; a" V
    case ctlcolor_edit:% A1 ~" _( g) @  [' B' R) N
    break;
, i$ J5 p' d7 y2 v   case ctlcolor_listbox:
. r8 E% V& j: M    if (listwidth > 0) { ( H# u+ I  k( l. @
       // new width of a listbox is defined) F2 v0 f8 |( {% G- X
       CRect rect;
# u9 I7 X) }& ^, m       pwnd->GetWindowRect(&rect);" ]& a5 a! T) y5 M9 W
       if (rect.Width() != listwidth) {
- V3 I0 X# F$ j0 ]# L9 e        rect.right = rect.left + listwidth;' Q0 G& `# O$ i5 H
        pwnd->MoveWindow(&rect);
2 k& w/ u/ G+ c2 Y       }
" d2 a) i; ^0 e6 t5 K5 F    }' ?  E+ x3 a) x6 L( j2 j& n& M
    break;* E! q) s- o: L) S" o
   }
$ m' Q. N! o. h! n6 v$ J
1 ^* y+ U* z( j" w! ]3 R9 \1 Q   // todo: return a different brush if the default is not desired
; v( L* A3 o& H/ W% G* r; i   return hbr;5 @7 l/ T4 Z7 X& b% f& s2 ]
}# `4 Q% e, Y; {! R; H: y7 d! r

$ C$ M/ M( a3 K; S& @; a4 j8 u
6 O- ^1 Y7 c, P  I- {: R  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。. D0 m' @* q6 Y

) K8 j+ N' I' m/ B6 W" l) Z+ K% k  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:
! R6 ^" g9 }* h3 y
1 d/ g& p# h+ ?3 nCComboBox::SetDroppedWidth(int width);
: W, E( x- e, u- U5 ?! C
2 {; |5 t1 h" p( w  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   8 o- x4 U$ t. `0 l- b
9 {$ [- o8 ^6 I9 j
  1.你所设置的值(就是通过上面的函数所设置的值)
4 i' R; \. k# {* g% w, M
7 z4 b& P6 {! q1 u  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-5 04:18 , Processed in 0.013902 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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