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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度   z: O& ^% X* j% ?0 ~
1 w8 I5 ^( I" g, b
2002-03-07· ·贾旭滨(译) ··
' w4 @$ Q/ Z. m! {) z  |0 ]1 `1 E/ u# ^
: k0 U$ O/ J. b5 c& d
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 - A: |; L. g: g. g/ Q2 W2 @* X
  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:7 p" a! E  b( x; N' T$ q

- n$ T, s3 |5 H; \HBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor) 6 U6 [/ G; V5 O0 L
{
) p0 m: r. d3 |9 }6 |1 [7 W  l9 X  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
- n$ P) f7 y: K- h9 |% K# p  switch (nctlcolor) {/ J! p8 J: y1 h( I
    case ctlcolor_edit:
+ X0 `6 U2 g$ a5 O0 n6 R    break;
3 @. f/ ]6 N: d/ L! I2 _' W   case ctlcolor_listbox:) i- n. L& E5 M1 D$ @  R
    if (listwidth > 0) {
" q, h) z4 V; j6 G- s       // new width of a listbox is defined4 D+ G! ^3 I% V5 B9 V) l5 N- C* k
       CRect rect;" X, W; W8 L& _; d( Y* @' m
       pwnd->GetWindowRect(&rect);
8 m! E4 s# X% M* {" D7 b       if (rect.Width() != listwidth) {
1 D: s8 r, ?0 O$ x        rect.right = rect.left + listwidth;: Y7 L" i7 o4 k6 }3 {
        pwnd->MoveWindow(&rect);
, E' [( A& z) b1 l       }8 b) L3 T% d6 S3 x9 X1 U( ^8 G
    }
4 \; T. J; ]# J" n0 @. c% S6 k0 H    break;6 e. p: z. m8 Q2 G7 l$ X
   }0 V  F6 \; \' y" I& X, C

! `0 a1 j' N3 A' j- y7 O7 ~) c   // todo: return a different brush if the default is not desired& N% b# H. C3 n0 S
   return hbr;. Z- H5 Z  F$ J2 M5 x0 P
}
5 ~$ e' I2 `5 e% r9 H5 X! m4 ~, N5 Q

# q: c0 V. t9 @7 @4 c5 f( k% K  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。) j$ u2 y9 k* ]) M. A" v9 [
9 p4 n5 K5 J/ z5 ~; H
  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:5 V" l3 m1 s5 u% f

2 C2 q5 g( b# Y9 `7 l2 m" GCComboBox::SetDroppedWidth(int width);
  k4 d2 p1 ]$ D% G* L4 n
7 B  ?0 N3 S: V; D& g. W- {3 f9 t6 \# o  _  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   " J* Y7 f$ J) ?$ F& n; {, A

: Z- {1 T- H/ \. l: p7 e  1.你所设置的值(就是通过上面的函数所设置的值)
5 `9 v+ F. n( \0 r% `% Q6 R& F: u# s% s9 q& }3 {
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-9-30 09:06 , Processed in 0.034162 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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