我是新手。大家帮我看看,谢谢了
AVIButton.cpp(38) : error C2352: 'CButton::Create' : illegal call of non-static member function
错的地方那段代码如下:可是我觉得似乎没错,可就是老报错。为什么呢?
 BOOL Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)   
{ BOOL m_bSucess=CButton::Create(lpszCaption,dwStyle,rect,pParentWnd,nID);

return m_bSucess;
}

解决方案 »

  1.   

    BOOL CAVIButton::Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)
      

  2.   

    BOOL CAVIButton::Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)
      

  3.   

    还是不行。这一块的代码是这样的:
    // AVIButton.cpp : implementation file
    //#include "stdafx.h"
    #include "AVIButtonDemo.h"
    #include "AVIButton.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // CAVIButtonCAVIButton::CAVIButton()
    {
    this->aviResource=0;
    }CAVIButton::~CAVIButton()
    {
    }
    BEGIN_MESSAGE_MAP(CAVIButton, CButton)
    //{{AFX_MSG_MAP(CAVIButton)
    ON_CONTROL_REFLECT(BN_CLICKED,OnClicked)// NOTE - the ClassWizard will add and remove mapping macros here.
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // CAVIButton message handlers
     BOOL Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)   
    { BOOL m_bSucess=CButton::Create(lpszCaption,dwStyle,rect,pParentWnd,nID);

    return m_bSucess;
    }void CAVIButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
    { // TODO: Add your code to draw the specified item
    CRect rect;
    GetClientRect(rect);
    if(!::IsWindow(m_AnimateCtrl))
    {
     m_AnimateCtrl.Create(WS_CHILD|WS_VISIBLE,rect,this ,0);
     m_AnimateCtrl.Open(this->aviResource);
     m_AnimateCtrl.GetClientRect(rect);  SetWindowPos(NULL,-1,-1,rect.Width()+4,rect.Height()+4,
     SWP_NOMOVE|SWP_NOZORDER|SWP_NOREDRAW|SWP_NOACTIVATE);
     rect.OffsetRect(2,2);
     m_AnimateCtrl.MoveWindow(rect);
     m_AnimateCtrl.Play(0,-1,-1); }
        CDC* pDC=CDC::FromHandle(lpDrawItemStruct->hDC);
    UINT nState=lpDrawItemStruct->itemState;
    CRect buttonRect;
    GetClientRect(buttonRect); if(IsWindowEnabled())
    nState&=~ODS_DISABLED;
    else
    nState|=ODS_DISABLED;
    COLORREF upcol,downcol,Frame;
    Frame=RGB(0,0,0);
    BOOL IsPressed=FALSE; if((nState&ODS_SELECTED)==ODS_SELECTED)
    {
     upcol=RGB(0,0,0);
     Frame=RGB(128,128,128);
     downcol=RGB(0,0,0);
     IsPressed=TRUE;
    }
    else{
    if((nState&ODS_DISABLED)==ODS_DISABLED)
    {
       }
        else{
    //normal
    upcol=RGB(255,255,255);
    downcol=RGB(128,128,128); }
    CPen* pOldPen=NULL;
    BOOL pen1Created;
    CPen pen1;
    BOOL pen2Created;
    CPen pen2;
    if(pen1Created=pen1.CreatePen(PS_SOLID,1,upcol))
         pOldPen=pDC->SelectObject(&pen1);
        pDC->MoveTo(1,rect.Height()-1);
    pDC->LineTo(1,1);
    pDC->LineTo(rect.Width()-1,1);
    pDC->MoveTo(0,rect.Height()-1);
    pDC->LineTo(0,0);
    pDC->LineTo(rect.Width()-1,0); if(pen2Created=pen2.CreatePen(PS_SOLID,1,downcol)){
       pDC->SelectObject(&pen2);
    }
        if(pen1Created)pen1.DeleteObject();
    pen1Created=FALSE;
        
        pDC->MoveTo(rect.Width()-1,0);
    pDC->LineTo(rect.Width()-1,rect.Height()-1);
    pDC->LineTo(0,rect.Height()-1);
    pDC->MoveTo(rect.Width()-2,1);
    pDC->LineTo(rect.Width()-2,rect.Height()-2);
    pDC->LineTo(0,rect.Height()-2); if(pen2Created)pen2.DeleteObject();
    pen2Created=FALSE; if(pen1Created=pen1.CreatePen(PS_SOLID,1,Frame))
    pOldPen=pDC->SelectObject(&pen1); if(IsPressed)
    {
     pDC->MoveTo(1,rect.Height()-2);
     pDC->LineTo(1,1);
     pDC->LineTo(rect.Width()-2,1);
    }
    else{
     pDC->MoveTo(rect.Width()-1,0);
     pDC->LineTo(rect.Width()-1,rect.Height()-1);
     pDC->LineTo(-1,rect.Height()-1);
     
    }
        if(pen1Created)pen1.DeleteObject();
     pen1Created=FALSE;
    if(pOldPen!=NULL)
    pDC->SelectObject(pOldPen);
    }
    }
      

  4.   

    /////////////////////////////////////////////////////////////////////////////
    // CAVIButton message handlers
     BOOL Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)很明显错了,应该是CAVIButton的成员
      

  5.   

    可是我把它改成了CAVIButton后,还是不行,提示出错如下AVIButton.cpp(38) : error C2352: 'CAVIButton::Create' : illegal call of non-static member function
      

  6.   

    我想你可能是没有在头文件中声明吧,notice:nonstatic member function,没有这个函数啊
      

  7.   

    illegal call of non-static member function
    // 这个是提示 “对非静态成员函数的非法调用”
    你 AVIButton 是不是继承自CButton的?
    总感觉你的代码比较奇怪。
      

  8.   

    你的头文件中 Create() 函数前面 加上 static, like thisclass CAVIButton : public ...
    {
    ...
    static BOOL Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID);
    ...
    };在.cpp 文件中 
    BOOL Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)
    {
    ...
    }
    前加上 CAVIButton:: 即BOOL CAVIButton::Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)
    {
    ...
    }