支持Office Xp/2003样式的扁平ComboBox控件


0 导论

首先,在网上可以找到很多这样实现扁平效果的ComboBox代码.我试着实现了一个比较简单的ComboBox控件,但是它却有很多的功能.

正如截图所示,你会发现在此控件中,我集成有如下的功能:支持大号字体,从右至左显示文字,两种下拉样式,当然还包括支持Office Xp/2003两种样式.

1 两种不同样式下的状态

    捕捉_2.jpg
   从上到下依次是
:正常状态,输入焦点时,不起作用,下拉状态.

2 如何使用代码


FlatComboBox
是一个继承于.NetFrameworkWindows.Forms.ComboBox的用户控件
通过重写类库中的WinProc来激活MouseMove等事件

 1Protected Overrides Sub WndProc(ByRef m As _
 2                       System.Windows.Forms.Message)
 3        MyBase.WndProc(m)
 4        Select Case m.Msg
 5
 6            Case &HF
 7                'WM_PAINT
 8
 9                '"simple" is not currently supported
10                If Me.DropDownStyle = _
11                           ComboBoxStyle.Simple Then Exit Sub
12
13                '==========START DRAWING===========
14                g = Me.CreateGraphics
15                'clear everything
16                If Me.Enabled Then
17                    g.Clear(Color.White)
18                Else
19                    g.Clear(Color.FromName("control"))
20                End If
21                'call the drawing functions
22                DrawButton(g)
23                DrawArrow(g)
24                DrawBorder(g)
25                DrawText(g)
26                '===========STOP DRAWING============
27
28            Case 78&H7, &H8, &H200, &H2A3
29                'CMB_DROPDOWN, CMB_CLOSEUP, WM_SETFOCUS, 
30                'WM_KILLFOCUS, WM_MOUSEMOVE,  
31                'WM_MOUSELEAVE (if you move the mouse fast over
32                'the combobox, mouseleave doesn't always react)
33
34                UpdateState()
35        End Select
36End Sub

37


通过Public属性来切换两种样式(Xp/2003):

 1'Property to let the user change the style
 2    Public Property FlatComboStyle() As styles
 3        Get
 4            Return style
 5        End Get
 6        Set(ByVal Value As styles)
 7            style = Value
 8        End Set
 9    End Property

10
ps:本控件由vb.net实现.  可以通过在线转化工具很容易的转化成C#代码
原文出处:http://www.codeproject.com/vb/net/FlatComboBox.asp
  源代码下载    Demo下载 
posted @ 2005-11-13 11:35 Kevin Li 阅读(2662) 评论(12)  编辑 收藏 所属分类: 外文翻译

  回复  引用  查看    
#1楼 2005-11-13 11:47 | QuitGame      
FlatComboBox是一个继承于.NetFramework中Windows.Forms.ComboBox的用户控件
^^^^^^^^^^^^^

这句话有问题吧 用户控件都是 继承自 UserControl 的
  回复  引用    
#2楼 2005-11-13 12:10 | 游荡的灵活 [未注册用户]
没有错,继承于 .NetFramework中Windows.Forms.ComboBox;
这样做的好处是只需要实现界面部分,其他的就可以使用原来的。。
而不需要重头写!
  回复  引用  查看    
#3楼 2005-11-13 20:41 | 装配脑袋      
与其用注释解释7, 8, &H7, &H8, &H200, &H2A3的含义,不如将他们直接定义成常数,既易读又易维护
  回复  引用  查看    
#4楼 2005-11-13 20:44 | 装配脑袋      
PS. 建议楼主增加一个Office 12风格,这样就更新潮了,呵呵。
  回复  引用  查看    
#5楼 [楼主]2005-11-13 21:07 | finesite      
学习了 装配脑袋的 blog,原来是一位vb大家啊,小弟我要以后向你多多请教了! :)
  回复  引用  查看    
#6楼 2005-11-13 22:21 | 装配脑袋      
对了,我再多问一句,你为什么不在OnPaint事件中绘制控件,而要截获WM_PAINT呢
  回复  引用  查看    
#7楼 2005-11-14 11:42 | 蛙蛙池塘      
什么扁平combox呀,我怎么看不到哪个比较扁呀。
  回复  引用  查看    
#8楼 2005-11-14 16:10 | Lion      
楼上的青蛙真搞笑.....
  回复  引用  查看    
#9楼 2005-11-15 11:07 | birdshome      
平的才最真,平的才最美~~~
  回复  引用    
#10楼 2006-08-29 16:43 | zjqwll [未注册用户]
为什么我不能用呢?
我要用在VB中啊,各位大虾帮帮忙啊
  回复  引用    
#11楼 2006-08-29 16:45 | zjqwll [未注册用户]
我需要QQ上面那样的啊 ,谁帮帮我啊 急急急急急急----------------------
  回复  引用  查看    
#12楼 [楼主]2008-01-17 23:12 | KevinLi      
QQ中什么样的呢?请说清楚

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  博客园首页

  新闻频道

  社区

  小组

  博问

  网摘

  闪存

  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-01-13 17:20 编辑过
成果网帮您增加网站收入


相关链接: