找回密码
 注册
查看: 5270|回复: 0

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度 . m9 @; M  s: B

' E& M5 Y. ~% |: ], }6 a$ E2002-03-07· ·贾旭滨(译) ·· ) |% o( o6 ^  L  K8 Q& K  Q
( f) l# K0 ^) Q* v
9 {& L/ g, j8 F+ R
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。 $ Y$ y/ i0 s7 e/ E- _3 p. m
  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:; Z( L/ m3 O) ], N

* F* q, h/ t% U- z: j9 P' bHBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
* o2 ^0 F6 G$ O: Z  i{
! w9 S/ W9 O4 \2 @  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
+ A/ K; v5 o7 P- v3 J  switch (nctlcolor) {7 m) n0 B* A4 f" f
    case ctlcolor_edit:3 Q! A- l7 Q7 g- R$ W
    break;' J, Z2 L; e5 c& ]8 L" D0 H
   case ctlcolor_listbox:3 }7 m8 R2 j5 {( X: [, L! w5 {
    if (listwidth > 0) {
% u+ X2 P3 ?# M9 ~  O! l' k       // new width of a listbox is defined; S7 j% ^1 L  _9 X" |8 P
       CRect rect;
3 q0 A. L( V- M) J       pwnd->GetWindowRect(&rect);/ O! |5 e* y7 B
       if (rect.Width() != listwidth) {
2 `0 |1 g- L9 w4 l        rect.right = rect.left + listwidth;$ M- [8 H7 M4 p
        pwnd->MoveWindow(&rect);4 f' b- c  x) z6 a5 I/ p. [
       }
- ]2 |: A1 c1 T9 e    }
) X4 g% N$ F; s. [3 Q    break;
2 o4 E* e; I1 S5 v0 c7 @   }& q  T* b3 J8 Q) j2 j* t0 S8 {7 x
* p: b, ~$ I! A
   // todo: return a different brush if the default is not desired! m6 k+ h3 ?; B0 e
   return hbr;8 T- `$ ?. ^: S
}
8 z( n' `; j+ ^. j
# [: M; ?% [: W4 d1 O! d9 T
+ f$ \$ J; }3 g# O5 k  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。
+ T, @3 ^' q* b) ]) |9 c9 P4 x% m# Q& y* ]/ p+ X3 v4 H
  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:3 s. G. }) ?# \; @" s2 t. w+ y

0 e' Y5 M+ z) g& n6 Q) tCComboBox::SetDroppedWidth(int width); 8 y& D7 O7 Y1 i$ Y

/ i% K9 a. D, p0 P- }# i$ a7 M1 I' [  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   
: y1 F& h! n+ r+ m# g1 Q' X% F" Q( p- n; e( A
  1.你所设置的值(就是通过上面的函数所设置的值)
& j! i1 i3 G5 a& a& j2 `" U9 n7 r% P  e0 T% n6 X/ t
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-10-2 10:15 , Processed in 0.016319 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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