按msdn上的解释:
CBitmapButton::AutoLoad 
BOOL AutoLoad( UINT nID, CWnd* pParent );
Return Value
Nonzero if successful; otherwise 0.
Parameters
nID
The button’s control ID.
pParent
Pointer to the object that owns the button.
但是我实在想不明白~这个函数就一个ID和pParent作参数~
它怎么知道读取哪一个位图呢?
按书上的说话把位图命名为"COPYD"和"COPYU"
然后用m_editCopy.AutoLoad(IDC_BUTTON1,this);
一直读不出来~如果加VERIFY宏,就会出错,
请问还需要设置其它地方吗?

解决方案 »

  1.   

    1、在资源对话窗口中增加按钮所需的按下、抬起和选中等状态所对应的位图及其ID标识,注意位图的ID标识必须与对话框中按钮的ID标识相对应,即如果按钮的ID标识为IDOK,那么位图的ID标识必须为OKN、OKU、OKF和OKX,这是该方法实现的关键;
      2、在资源对话窗口中增加按钮所在的对话框和标准按钮及其所对应的各种ID标识,注意按钮的ID标识必须与位图对应,如果相应位图的标识为OKN等,则按钮ID标识必须为IDOK或ID_OK;
      3、利用类向导ClassWizard增加新类CBMTest1Dlg,其基类选择基于对话框CDialog的类型,并设置其头文件为Bbutton.cpp,但不设置其实现文件名;
      4、在实现文件Bbutton.cpp中进行如下代码完善:
       class CBMTest2Dlg : public CDialog
       {//完善按钮类控制代码
       protected:
      CBitmapButton buttonOk,buttonCan;//定义按钮
       public:
       //{{AFX_DATA(CBMTest2Dlg)
       enum {IDD=IDM_TEST_BITMAP_BUTTON2};//按钮对话框标识
       //}}AFX_DATA
       CBMTest2Dlg():CDialog(CBMTest2Dlg::IDD){}//映射类
       BOOL OnInitDialog();//初始化对话框
       //{{AFX_MSG(CBMTest2Dlg)
       //}}AFX_MSG
       DECLARE_MESSAGE_MAP()
       };
       ......//其它代码
       BOOL CBMTest2Dlg::OnInitDialog()
       { //完善初始化函数
       VERIFY(buttons[i].AutoLoad(IDOK,this));//调入位图
       VERIFY(buttons[i].AutoLoad(IDCANCEL,this));
       return TRUE;
       }
      

  2.   

    对呀
    CBitmapButton myButton;
    myButton.AutoLoad(IDC_MYBUTTON, this);
      

  3.   

    1、在资源对话窗口中增加按钮所需的按下、抬起和选中等状态所对应的位图及其ID标识,注意位图的ID标识必须与对话框中按钮的ID标识相对应,即如果按钮的ID标识为IDOK,那么位图的ID标识必须为OKN、OKU、OKF和OKX,这是该方法实现的关键;
    ~~~~~~~~~~~~~~~~~这儿的OKN应该是OKD吧?
      2、在资源对话窗口中增加按钮所在的对话框和标准按钮及其所对应的各种ID标识,注意按钮的ID标识必须与位图对应,如果相应位图的标识为OKN等,则按钮ID标识必须为IDOK或ID_OK;
    ~~~~~~~~~~~~~~~~~这儿我有一点想不通,VC6技术内幕中有一个例程,使用了IDC_BUTTON1的按钮ID,但是用AutoLoad它居然也能成功?
      3、利用类向导ClassWizard增加新类CBMTest1Dlg,其基类选择基于对话框CDialog的类型,并设置其头文件为Bbutton.cpp,但不设置其实现文件名;
    ~~~~~~~~~~~~~~~~~能具体解释一下这儿有什么作用吗?
    4。 
    还有就是为什么设置了CBMTest1Dlg类而没有用~却又另外派生一个CBMTest2Dlg类呢?