我是新手。大家帮我看看,谢谢了
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;
}
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;
}
// 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);
}
}
// CAVIButton message handlers
BOOL Create(LPCTSTR lpszCaption,DWORD dwStyle,const RECT& rect,CWnd* pParentWnd,UINT nID)很明显错了,应该是CAVIButton的成员
// 这个是提示 “对非静态成员函数的非法调用”
你 AVIButton 是不是继承自CButton的?
总感觉你的代码比较奇怪。
{
...
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)
{
...
}