MFC CBitmapButton使用

来源:互联网 发布:苏州经济数据 编辑:程序博客网 时间:2024/06/04 01:01

看了几种带皮肤按钮的实现方案,比如自绘按钮http://blog.csdn.net/JamesXing/archive/2008/01/10/2033891.aspx,使用wince GWES的API http://blog.csdn.net/JamesXing/archive/2008/01/10/2033896.aspx,一个自绘不规则按钮的实例http://topic.csdn.net/u/20101118/13/53b2087a-82c2-4cf0-8c45-3a38f87f820c.html,以及用MFC里的CBitmapButton加上自编写入文字功能http://topic.csdn.net/u/20070611/09/d59ec937-70b1-49f2-b8df-ff44a87b1a04.html。第一种思路清晰,可以增强很多画笔区域等概念,但频繁使用画笔,对于GDI概念不熟的我可能容易造成资源泄漏;第二种占用嵌入式系统资源少,但需要重新开发;第三种应用场合灵活,可用于各种形状的按钮,缺点同一;第四种相对简单,但按钮形式单一只能为一张图片的形式没有透明效果。时间所限,我这个菜鸟准备从第四种方案着手。先尝试CBitmapButton的使用。

按钮一般有四种状态:up/normal, down/select, focus(意为首选,可能为画面中只有一个按钮,或上次选择的就是此按钮。对于windows来说,就是button上有一个虚线框的情况), disable。第一种是必须有的,后三种可选。因此,至少需要准备button的一张图片。CBitmapButton的使用中,装载按钮图片有两种方法:AutoLoad()和LoadBitmaps()。

AutoLoad()法,该法将四种状态下的图片自动装载到BitmapButton中。1)在Dialog中拖入button控件,设置ownerdraw为true,caption为MYIMAGE(例),ID为IDC_MYIMAGE。2)将四张图片添加到bitmap资源,命名为"MYIMAGEU", "MYIMAGED", "MYIMAGEF", "MYIMAGEX",对应button四种状态,名称中需要加入分号。3)在头文件中手动添加对象CBitmapButton m_cBtn; 4)在对话框的OnInitDialog()中添加m_cBtn.AutoLoad(IDC_MYIMAGE, this);完成

LoadBitmaps()法。该法手动指定button每种状态的图片,优点是可以不提供不需要的状态,如focus,且多个button可以使用同样的图片,在资源中只需装载一次,节省空间。1)在Dialog中拖入button控件,设置ownerdraw为true,ID任意(例:IDC_BUTTNO4)。2)将所需图片添加到bitmap资源中,ID任意(例:IDB_BTNU,IDB_BTND)。3)在头文件中手动添加对象CBitmapButton m_cBtn; 4)在OnInitDialog()中添加 m_cBtn.SubclassDlgItem(IDC_BUTTON4, this); //关联按钮和对话框 m_cBtn.LoadBitmaps(IDB_BTNU, IDB_BTND); m_cBtn.SizeToContent();//调整大小. 完成

下一步就是继承CBitmapButton类,重载DrawItem实现文字写入。

原创粉丝点击