自绘下拉列表框

转自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(按钮区域)。这样就可以很好的解决按钮的绘制问题。具体实现请参考源码。
        正如文章开始所说,下拉列表框得重绘是较为复杂的,本文只是简单地实现了客户区的自绘。希望这篇文章能起到抛砖引玉的作用,期待和大家共同讨论,共同提高。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值