怎么使用MFC的CObArray?(问题已解决)
我的想法是这样的,派生一个CObject为基类的类:CMyTestOb。然后将其插入到CObArray中.例如:
class CMyTestOb : public CObject
{
// Construction
public:
CMyTestOb();
CMyTestOb(const CMyTestOb& mb);
CMyTestOb operator=(CMyTestOb* mb);
// Attributes
public:
int m_x,m_y;
static int m_num;
public:
virtual ~CMyTestOb();
};
int CMyTestOb::m_num=0;//初始化静态变量
CMyTestOb::CMyTestOb()
{
}
CMyTestOb::CMyTestOb(const CMyTestOb& mb)
{
m_x=mb.m_x;
m_y=mb.m_y;
m_num=mb.m_num;
}
CMyTestOb::~CMyTestOb()
{
}
CMyTestOb CMyTestOb::operator=(CMyTestOb* mb)
{
CMyTestOb resualt;
resualt.m_x=mb->m_x;
resualt.m_y=mb->m_y;
resualt.m_num=mb->m_num;
return resualt;
}
在需要响应的消息类中做一些操作。我想实现的是将鼠标按下的点和次数记录下来,放在CMyTestOb中。然后将其加入CObArray中。需要的时候取出来。我的做法是:
1在view类中加入成员变量
public:
CMyTestOb m_myob;
CObArray m_array;
2响应LButtonDown消息:
void CCObArrayView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
m_myob.m_x=point.x;
m_myob.m_y=point.y;
m_myob.m_num++;
m_array.Add((CObject*)&m_myob);
//在这里插入的时侯进行了类型转换,会不会类型转换的时候出错了?
CView::OnLButtonDown(nFlags, point);
}
3在适当的时候将CObArray中的对象取出来。
比如在一个函数中:
CString str="",m_str="";
CMyTestOb tempob;
int j,i = m_array.GetSize();
for (j=0;j<i;j++)
{
tempob=(CMyTestOb*)m_array.GetAt(j);//
///////////////////////////////////////
//问题就出在这里了,取出来的时候,除了静态变量的记录是正确的,其他两个成员变量的值是错误的。
//兄弟就是这个地方不知道怎么错了,如果是刚才类型转换的错误,要怎么改?还请懂的高手帮忙改一下。感激不
//尽。。。
///////////////////////////////////////
str.Format("x=%d,y=%d,num=%d",tempob.m_x,tempob.m_y,tempob.m_num);
m_str+=str;
}
MessageBox(m_str);
CMyTestOb::m_num=0;
插入是正常的。但是取出来的时候CMyTestOb的值就不正常了。源代码附在下面了。各位大虾,救救我。。。
[[it] 本帖最后由 VanHorn 于 2008-7-28 20:18 编辑 [/it]]
测试CObArray.rar
(39.22 KB)