|
|
在ComboBox中改变列表框的宽度 . E6 x6 [9 j3 h7 x3 P! f
* H9 K% X6 k, K2002-03-07· ·贾旭滨(译) ··
9 w. U- Q4 p' g" n4 J& w$ F% o1 ?
' N* D% H# r# D: V
) @" Y0 Y9 z) {: P( P 我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 8 k3 _4 ?: c+ s$ U$ |; d, x9 P( f
为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:& r7 r: F- X( ~6 @
2 {+ P! r1 a3 rHBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 2 S; u' K$ a2 d
{
7 n3 I2 w' C+ v8 M0 S c. m HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);: v5 ?4 ?8 j# c R7 K
switch (nctlcolor) {
6 s- i/ ], e1 Y T: N" L! j case ctlcolor_edit:6 Y s* }: a4 U* g: e% y N/ F5 ]
break; q/ G4 \: D( W6 N3 P9 d& }8 q( t
case ctlcolor_listbox:! B4 C# m- ?! ?' D1 h% M
if (listwidth > 0) { * i& O" f4 g' {. x3 O! T
// new width of a listbox is defined! B: }- g; H1 f
CRect rect;+ z* l! }+ O5 v- |' A0 D# y2 N
pwnd->GetWindowRect(&rect);" l, R2 Y0 c8 {% P+ \4 h# X0 n
if (rect.Width() != listwidth) {( N* j \( x- r; G
rect.right = rect.left + listwidth;
t3 T' x- ?' ~8 \2 C* x pwnd->MoveWindow(&rect);" H& ^* Z4 G" g) X1 q& S
}
- _0 u% k6 t+ ^+ w' C7 p }
# P2 G) _2 \3 T; }" l' m9 j break;
: _& u+ ?9 P6 o6 a4 O' H6 @- l) f }9 d; Q# Z( c2 b+ [. @6 W
6 j9 F( k0 P, _6 f& c% s
// todo: return a different brush if the default is not desired/ K! m0 |4 U- b B
return hbr;% B, w. w7 c9 E, J! t6 z( B
}+ A% C& m0 ~# k+ F! N4 q: M
" b! C; S& s M8 X1 ?% ]! X: N2 _& K
这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
$ {- a, ~+ x0 I- O4 ?) q* k( v+ K5 B$ L# T8 A9 u
上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:
: V7 Z Y7 U. |: `4 V8 J7 n) K* {" U$ [1 m/ ]& k1 R# b
CComboBox::SetDroppedWidth(int width); * Z9 ~; Y3 j0 N) s* P4 R, ~1 I6 u
3 Q1 V% W% D8 R# t9 h8 a5 y' M
通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:
# d# e8 \: j# f$ J$ N7 Q+ o5 [8 A0 R6 r1 r/ g2 N
1.你所设置的值(就是通过上面的函数所设置的值); r! m F& b$ u& j9 B; M4 [
- H$ Z2 p8 t4 W, ], k3 H 2.列表框的值 |
|