gla 用户手册:CBitmapButton的使用

来源:百度文库 编辑:偶看新闻 时间:2024/05/04 15:45:27
http://blog.sina.com.cn/s/blog_56e19aa70100flan.html CBitmapButton的使用 CBitmapButton作为MFC的控件类,并不为很多人所使用,因为现在网上遍布着从CButton派生的各种各样的按钮类,其中最为著名的就是CButtonST类了。但是最近在CSDN上看到几个问题都是使用CBitmapButton类,但是由于使用错误、不当而造成程序崩溃或者错误的。所以总结一下CBitmapButton类的使用,希望能帮助一些初学者。可以参考MSDN自带的例子“CTRLTEST”学习CBitmapButton的用法。

    个人总结如下:

    1、在资源编辑的时候选中按钮的Owner draw即可,不需要选择Bitmap属性!

    2、在程序中定义一个CBitmapButton成员变量。不能使用ClassWizard为按钮映射一个CButton变量,然后改为CBitmapButton,这么做并不能将按钮直接映射为CBitmapButton类的对象,反而会出现初始化错误。
    3-1、使用CBitmapButton::LoadBitmaps装载各种状态的图片,使用SubclassDlgItem关联到想要的按钮,使用CBitmapButton::SizeToContent函数使按钮适合图片大小。。注意Loadbitmaps一定要在关联到按钮之前进行!

    3-2、或者是使用CBitmapButton::AutoLoad函数关联到想要的按钮。需要注意:A、之前不能使用CBitmapButton::LoadBitmaps装载各种状态的图片,否则会出错。B、AutoLoad函数完成的关联和改变按钮大小的CBitmapButton::SizeToContent函数的功能。C、CBitmapButton::AutoLoad使用的位图是默认资源ID的,即它会自动装载相关资源位图。位图的资源ID格式为:"按钮Caption+U"、"按钮Caption+D"、"按钮Caption+F"、"按钮Caption+X",分别代表Up、Down、Focus、Disable状态。如资源编辑时,希望关联的按钮的Caption为Test,那么其默认装载的位图资源的ID为:"TestU"/"TestD"/"TestF"/"TestX",注意分号""也是其ID的一部分。

over

 

我们有时希望对应按钮的不同状态,按钮可以有不同的显示形式。比如通常情况下按钮的四种状态

正常显示 (Up)     鼠标按下(Down)        获得焦点(Focus)        不可用(Disable)

因此可以用四张位图来对应这四种状态,我们不需要为每一种状态单独加载位图,只需要利用

CBitmapButton类即可   

总共有两种方法实现:

下面先说第一种:

假如有四张位图:IDB_BMP_UP    IDB_BMP_DOWN     IDB_BMP_FOCUS          IDB_BMP_DISABLE   

给对话框添加一个CBitmapButton类的对象    m_bmpBtn;

在对话框上方一个按钮 ID : IDC_BTN_IMG       设置Owner draw属性

然后在OnInitDialog中:

m_bmpBtn.LoadBitmaps( IDB_BMP_UP,IDB_BMP_DOWN,IDB_BMP_FOCUS,IDB_BMP_DISABLE);

m_bmpBtn.SubclassDlgItem( IDC_BTN_IMG , this );即可

其中SubclassDlgItem(UINT nID, CWnd* pParent)用来将m_bmpBtn和IDC_BTN_IMG关联起来

第二种方法:

用AutoLoad(UINT nID, CWnd* pParent),顾名思义,就是自动为按钮加载位图

可是光看这个函数似乎跟位图 并没有扯上关系啊???

这就需要从位图的命名上下功夫了,直接使用上面的位图是不可以的,需要重新命名一下

假如按钮的caption为:image(一定要有  则四张位图分别为:

"imageU"    "imageD"    "imageF"   "imageX"  

注意四张位图的的ID 是有双引号的。  (#)