|
|
在ComboBox中改变列表框的宽度
# D* Q% |- |# b8 u" D' V
' z; G& b- ?4 H: O5 O2002-03-07· ·贾旭滨(译) ··
) O8 I( q, q {0 l, C4 ]5 X, M% Y. g5 _. a+ N* A& t4 o
4 g* I# r7 l! ~1 \& U 我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 0 A B' I9 ?- h5 S; l# x& b4 p
为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:, S9 t5 D* q$ G6 V
I. b7 G9 @9 M7 ^7 L
HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 2 U ~7 T z/ N, D6 ~# c) h, _
{& J* ]0 E) q% D) j9 x' R
HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);# P/ o9 C6 K. E* ]
switch (nctlcolor) {# l" F& k/ A O( ^! q) _: z
case ctlcolor_edit:
' L x" W2 m8 H0 J5 C% e& R. X break;
4 i! m0 g! q% w& ?$ p( n5 J case ctlcolor_listbox:' K3 _; V- r, _
if (listwidth > 0) { + R+ W" Q* Q" r$ F& e" x7 J ^
// new width of a listbox is defined, m; p+ A6 K9 z' E* G$ o. ^6 ^
CRect rect;
( W% N: v: e+ B6 o ]1 Z' c pwnd->GetWindowRect(&rect);
! K) Q. k1 X' R A ?8 o if (rect.Width() != listwidth) {& E7 d) h; W" J" H, o& ]* r
rect.right = rect.left + listwidth;: r1 O( E( r7 C. Y
pwnd->MoveWindow(&rect);6 A5 a) C2 A1 n) [. J- l
}
5 l" r7 ^, V# H9 w5 i) U; { }
5 `0 P# p) N/ Y9 C break;" {: X" [. v% @, _7 h
}
4 f- Y; t0 b. B0 S' H5 R6 `! ^4 S W, R8 P
// todo: return a different brush if the default is not desired7 X, C* K$ F6 ~ ~2 m$ y4 ?
return hbr;0 ?* d: A, A; T- Z, q V5 S0 v
}
, k; Z" J8 q& \9 k6 A/ C5 r+ S! ^
+ @7 P+ L# _$ |3 q% V; d( Q" C8 @+ i* h( P: Z
这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。, Z( ?3 @1 J* ~1 p8 q1 D, `
, L3 Q9 n6 k3 }2 C, c* ^0 p 上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是: h! s0 F* r: N3 I" A1 J
\( s5 M( l& ^) c O4 e0 HCComboBox::SetDroppedWidth(int width); 9 ]) c% H5 P4 r4 e. c% E4 K
5 t( x+ p' a9 M, |0 Y& s 通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值: $ J5 V# D0 j3 }$ e% y
6 r k5 E; u7 y% O8 x7 P# R
1.你所设置的值(就是通过上面的函数所设置的值); n& M7 Z3 X; M
; T- o* {9 {) A8 g: n+ [2 F7 W 2.列表框的值 |
|