一个基础的问题,请高手近来赐教,低手近来学习。谢谢!!
在下面的程序中想删除pcard居然删除不了,按道理讲鼠标单击之后,pcard就被删除了,可是它还在,仍响应下一次操作。其中的Card是我定义的一个类,具体的实现可看后面。
程序如下:
#include <bitmap>
#include<iostream>
#include"Card.h"
using namespace std;
SimpleWindow *myWindow=new SimpleWindow("myWindow",15.,9.,Position(1.,1.));
Card *pcard;
int MouseEvent(const Position &p)
{
if(pcard->IsHited(p))
{
delete pcard; //就是这里,单击之后,它没被删除,下次还响应
//什么原因????
cout<<"has delete"<<endl;//这个信息每次都输出
}
return 1;
}
int ApiMain()
{
myWindow->Open();
pcard=new Card("c1.bmp",1,Club,*myWindow);
pcard->Draw();
myWindow->SetMouseClickCallback(MouseEvent);
return 0;
}
下面是Card类的实现 Card.cpp
#include <cassert>
#include <bitmap>
#include <randint>
#include"Card.h"
//此处为构造函数
Card::Card(string BmpFile,int Value, DesignAndColor CardDesign,
SimpleWindow &W):CardValue(Value),Window(W),
CardDesignAndColor(CardDesign),IsFaceSide(0),HasTaken(0)
{
FaceBmp.SetWindow(Window);
FaceBmp.Load(BmpFile);
assert(FaceBmp.GetStatus() == BitMapOkay);
BackBmp.SetWindow(Window);
BackBmp.Load("s0.bmp");
}
int Card::GetCardValue()
{
return CardValue;
}
DesignAndColor Card::GetCardDesignAndColor()
{
return CardDesignAndColor;
}
void Card::Draw()
{
if(IsFaceSide)
FaceBmp.Draw();
else
BackBmp.Draw();
return;
}
void Card::SetPosition(const Position&p)
{
FaceBmp.SetPosition(p);
BackBmp.SetPosition(p);
return;
}
void Card::EraseCard()
{
FaceBmp.Erase();
return;
}
void Card::TurnCard()
{
if(IsFaceSide)
{
BackBmp.Draw();
IsFaceSide=0;
}
else
{
FaceBmp.Draw();
IsFaceSide=1;
}
return;
}
bool Card::IsHited(const Position &p)
{
if(FaceBmp.IsInside(p)&&BackBmp.IsInside(p))
{
return 1;
}
else
return 0;
}
SimpleWindow Card::GetWindow()
{
return Window;
}
下面是Card.h
#ifndef CARD_H
#define CARD_H
#include <cassert>
#include <bitmap>
enum DesignAndColor {Hearts,Spade,Club,Piece};
class Card
{
public:
Card(string BmpFile,int Value, DesignAndColor CardDesign,SimpleWindow &W);
int GetCardValue();
DesignAndColor GetCardDesignAndColor();
void Draw();
void SetPosition(const Position &p);
void TurnCard();
void EraseCard();
bool IsHited(const Position &p);
SimpleWindow GetWindow();
private:
int CardValue;
DesignAndColor CardDesignAndColor;
Position CardPositon;
BitMap FaceBmp;
BitMap BackBmp;
SimpleWindow &Window;
bool IsFaceSide;
bool HasTaken;
};
#endif