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

在ComboBox中改变列表框的宽度

[复制链接]
发表于 2004-2-26 19:37:21 | 显示全部楼层 |阅读模式
在ComboBox中改变列表框的宽度
, [5 n+ n: C/ u* }# ?2 m  Y
! o  T7 T$ {4 M6 t8 p2002-03-07· ·贾旭滨(译) ··
. R* {# Q; N8 L8 n+ t
7 p3 u) n; T8 W) e# {5 U" E9 o1 {" z& o, w
  我们经常会使用到组合框,而组合框是是有2种功能的--下拉和列表。一般情况下,列表框的宽度和选择框是一样宽的,但是我们有些时候确实很需要把列表框的宽度变大,一便让我们能更好的看我们要选的东西。
4 V& j: Y' h$ ?/ S1 q' b- M  为了能有这个功能,我写了下面的这个函数。首先得在你的对话框中添加一个的WM_CTLCOLOR的消息句柄,或者使用CComboBox的继承类,而且在其中添加下面的代码:4 Z" W: G$ D3 u6 m

7 x! ~; f+ i) N8 iHBrush tvisualcombo::onctlcolor(CDC* pdc, CWND* pwnd, UINT nctlcolor)
4 |. y( u9 ~" p& T% ?8 N" g  C{
' Z4 O4 J3 \5 K. I& Q2 {3 g% n  HBrush hbr = ccombobox::onctlcolor(pdc, pwnd, nctlcolor);
2 d1 S' S1 N3 I) X9 P  switch (nctlcolor) {
% k7 z% I5 f$ ^9 u    case ctlcolor_edit:
! X. C# S0 z& l    break;
& y: w+ P: H* g: w" _   case ctlcolor_listbox:
& u. c! e1 F( d  o& m# `, p    if (listwidth > 0) {
$ |  N* `8 y2 t% Y6 C       // new width of a listbox is defined
5 T8 }4 {7 c, n5 l       CRect rect;+ Q' m4 W5 m* O2 T
       pwnd->GetWindowRect(&rect);
; G. e+ H0 ^. f! X1 P* C       if (rect.Width() != listwidth) {
& g/ O* R; `  i( n0 I# ^        rect.right = rect.left + listwidth;
6 t3 R) _% c# K+ c) `6 O& g8 g) g        pwnd->MoveWindow(&rect);6 m: k$ ]4 j+ ?& b
       }
4 o& _1 N4 V9 o: l    }
' g  W# d* ?" ]2 U1 P    break;4 Z! U1 V* H+ `3 W8 N' o
   }& I  I! Y& z* T8 i5 J) H

) d' c  s  q$ [! O   // todo: return a different brush if the default is not desired. J! F' s) b+ b9 L# y
   return hbr;' B  a: K% m3 ~* r' H
}$ v( m! f* \! T

  U& B) \! x) O% c+ F4 w8 q9 S7 z, q' V# w
  这样之后还没有完全好,你还得刷新一下列表框,那样才能随时根据列表框中的文本的长度,而改变列表框的宽度,要想这样的话,你还得这样,你必须扫描列表框中的条目,还得计算其中文本的长度(通过pdc),这样你如果再刷新列表框的话,才能一条目中比较长的来显示。: z3 `2 f3 m  |. z5 h7 d/ n, P

, w& {' W8 f$ B( S! n  上面的方法是通过WM_CTLCOLOR消息来实现的,后来才知道在MFC的CComboBox类中有一个函数也可以实现同样的功能,就是:
' ~5 C4 U: ?! c3 E. Z% w, l7 y; N! W/ \! e+ v8 i% J& |
CComboBox::SetDroppedWidth(int width);
: `1 P  l" z4 a0 b* m; R4 L
6 y, X0 h! P/ q6 R9 @9 ]  通过这个函数,你可以把宽度设成你自己喜欢的值,而它的实际的宽度是下面2个值中的最大值:   $ z+ C- z! R" ?4 w1 _# n

0 |6 V5 ^; E4 ~! I& ^; K" ]. O- G  1.你所设置的值(就是通过上面的函数所设置的值)
. j2 R& A  q; N$ B& V" L4 S2 r, F$ ~; h! P4 n8 D# j1 E. ]8 B# D0 T5 U' f1 m- m
  2.列表框的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-11-14 16:30 , Processed in 0.018116 second(s), 15 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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