os windows xp
compiler vc6.0在对话框中加入了一个按钮风格为owner drawer/*CGridDemoDlg.h*/
class CGridDemoDlg : public CDialog
{
................
CBitmapButton myButton;
};/*CGridDemoDlg.cpp*/BOOL CGridDemoDlg::OnInitDialog()
{
myButton.AutoLoad(IDC_BUTTON_BMP,this);
myButton.SizeToContent();
}
当我点对话框右上角的关闭时,提示wincore.cpp 980出错。把.cpp中的2行注释掉就不报错了.各位高手这是怎么回事啊?

解决方案 »

  1.   

    参考msdn例子http://msdn2.microsoft.com/en-us/library/zz9355ha(VS.80).aspx
      

  2.   

    VC打不开阿,点哪个类型的文件?ctrltest.vcproj在vc6上打不开阿
      

  3.   

    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的一部分。   
     
      

  4.   

    因为要在EVC环境下实现位图按钮,CBUTTON不支持SETBITMAP()函数,所以才用CBITMAPBUTTON的AUTOLOAD()。我怕CButtonST在evc下也不行,所以先用MS的,我也会试下CButtonST看行不。
    1.只选中了OWNER DRAW。
    2.我是手动添加的CBitmapbutton 对象
    3.只用了AUTOLOAD,没有使用LOADBITMAPS
    4.位图资源ID---"LINEU","LINED",我只给出了2种状态的图片,另外2种状态我没有。先感谢yongdu()给出这么详细的解答,我再试下。
      

  5.   

    DoDataExchange是否将变量与ID关联了?
      

  6.   

    它是通过AUTOLOAD(IDC_BUTTON_ZOOMIN,this)关联的.
    如果代码改成下面的样子则不会出现上述现象,这是为什么啊。
    /*CGridDemoDlg.h*/
    class CGridDemoDlg : public CDialog
    {
    ................
    CBitmapButton *myButton;
    };/*CGridDemoDlg.cpp*/
    BOOL CGridDemoDlg::~CGridDemoDlg()
    {
    delete myButton;
    }
    BOOL CGridDemoDlg::OnInitDialog()
    {
    myButton = new CBitmapButton;
    myButton->AutoLoad(IDC_BUTTON_BMP,this);
    }