自绘下拉列表框

转载 2013年12月03日 10:07:39

转自http://blog.csdn.net/xianglitian/article/details/1731056

 

源文件 

        下拉列表框,又称组合列表框,他是一个较为复杂的控件。它有三种状态,simple、drop down、drop list。由三个控件组成,编辑框、下拉按钮、listbox。所以,要实现下拉列表框的综合自绘,其工作量是蛮大的。而且,在一些特殊场合,要求下拉列表框具有一些特殊要求,所以想在一个例子中完全实现下拉列表框的所有功能也不太现实。基于上述愿因,本例中只是简单地实现了drop list状态下的,显示部分的控件的重绘,其中包括只读的编辑框和下拉按钮,例子中并未重绘listbox。
        明确了目标,我们就可以开始工作了。首先还是观察,下拉列表框和编辑框一样都有一个3D的外观。不一样的时,在“自绘编辑框”一文中我提到过,编辑框的3D外观是非客户区。而通过实验我发现,在下拉列表框中3D外观属于客户区,这样一来我们必须重载OnPaint函数来进行重绘。说到这大家应该明白了,在这个例子中,我只是重绘了下拉列表框的客户区,这其中包括按钮和编辑框。
        重绘客户区去掉3D外观,我们需要绘制边框,绘制背景,绘制显示文字,绘制按钮。前三项都好说,有一点绘图经验的人都不会对如何绘制这些东西有疑问。但是,对于下拉按钮的绘制就存在一些问题,按钮的区域多大?按钮的状态如何确定?下拉按钮是一个CButton么?
        为了解决按钮绘制的问题,我用了COMBOBOXINFO结构,同过GetComboBoxInfo函数获取到了下拉列表框的相关信息,这个结构中包含了stateButton(按钮状态)和rcButton(按钮区域)。这样就可以很好的解决按钮的绘制问题。具体实现请参考源码。
        正如文章开始所说,下拉列表框得重绘是较为复杂的,本文只是简单地实现了客户区的自绘。希望这篇文章能起到抛砖引玉的作用,期待和大家共同讨论,共同提高。

 

MFC 自绘listbox , 自绘ComboBox 下拉列表框 如何设置其列表项的高度和宽度?

自绘ListBox 设置其列表项的高度和宽度可以通过重载虚函数 MeasureItem (LPMEASUREITEMSTRUCT lpMeasureItemStruct) 来实现: void CMy...

易语言自绘超级列表框源码

  • 2015年04月26日 17:49
  • 7KB
  • 下载

VC ++MFC列表框(CListBox)控件简单自绘

CObject←CCmdTarget←CWnd←CListBox CListBox类提供Windows列表框的功能。列表框显示项的列表,如用户可以见到和选择的文件名称。在单选列表框里,用户只可选择一...

自绘列表框

  • 2011年10月01日 12:06
  • 58KB
  • 下载

从零开始学android:Android事件处理—下拉列表框与OnItemSelectedListener

下拉列表监听 Spinner组件的主要功能是用于进行下拉列表显示的功能,当用户选中下拉列表中的某个选项之后可以使用Spinner类中提供的setOnItemClickListener()方法进行监听。...

下拉列表框

  • 2014年10月14日 22:59
  • 4KB
  • 下载

EasyUI ComboBox(下拉列表框)

ComboBox(下拉列表框) 扩展自$.fn.combo.defaults。使用$.fn.combobox.defaults重写默认值对象。 下拉列表框显示一个可编辑文本框和下拉式列表,用户可以...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:自绘下拉列表框
举报原因:
原因补充:

(最多只允许输入30个字)