|
|
在ComboBox中改变列表框的宽度 4 z! h7 |2 D% L+ c4 k2 c
$ w4 R& U! T* S2002-03-07· ·贾旭滨(译) ··
k/ A/ U. p; @- A
8 G6 b h% J+ f% s$ f$ ^1 }2 q/ A8 @& M" R. _1 c8 I9 `
我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 * ]4 Y- @9 J: W+ I
为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:1 A) f" B9 t- D
. O! y7 N8 R9 k1 GHBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) ' Q; N k+ u: Q/ w, o9 a5 z& u5 y3 x
{
; Q' H% u% X$ q& I6 W HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
, q r# X1 t: r0 T switch (nctlcolor) {# y3 o+ Y- j( T' y5 R
case ctlcolor_edit:
) c# } z9 |$ y' C1 x break;- M) V- R# g) r% z% v
case ctlcolor_listbox:
$ R5 A3 x5 l7 H if (listwidth > 0) {
1 p# R1 _( @: _7 v# I, j9 w K% S // new width of a listbox is defined
) S5 ]; j# A* E& M4 d" Y% a CRect rect;
) E) s- Q7 e2 c r, e pwnd->GetWindowRect(&rect);
+ W7 ^' f3 t1 F& q# N5 a; H+ Q if (rect.Width() != listwidth) {6 l8 @1 b! ] p. ?
rect.right = rect.left + listwidth;% }6 l3 n8 O' K; b' A. y' H2 a
pwnd->MoveWindow(&rect);
6 r# P7 B! ?' x6 ^+ t- l5 f) j }
4 c/ C# ?% y) R! S, R: P7 w. Q* i }3 R; {3 h7 p5 A
break;
1 I& \" w/ C2 Q. m% V }- {, e" ^5 i6 F! S$ j5 d' y, d) @: `
4 k3 S) l! b( L- S$ k // todo: return a different brush if the default is not desired8 p0 {* A) J$ n4 k9 ^# o% h- G
return hbr;$ Z+ f$ e0 C1 E0 O: m$ h* R
}# }' Y. c4 m" u7 X% \) o3 ?5 K
* u; k" s" [# R! O+ ]5 |, N
6 C3 o9 Z# c1 } o& T) J8 x 这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
" R3 ~1 r: j6 _% I& B0 j, S# g; m$ A$ _" P' x* n
上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:
- B3 B3 c) K2 K7 D7 V: V# c; G/ J9 W/ P! ?3 h
CComboBox::SetDroppedWidth(int width);
" Q1 H1 L6 v2 Q P, X* F$ r( H
- w; i4 W( m1 J( l; J' e0 u 通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:
2 _6 K) S2 K8 U8 n8 M& o/ }- Q
3 Y$ E6 a2 o" o# e 1.你所设置的值(就是通过上面的函数所设置的值)3 Q4 s8 O. X) X" x: L8 E
# l0 k- N/ B; U/ P a! C% P 2.列表框的值 |
|