| 编程中国 | 业界新闻 | 技术文章 | 视频教程 | 下载频道 | 程序源码 | 个人空间 | 编程论坛
全能ASP/PHP/ASP.NET主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付学习型 ASP/PHP/ASP.NET 主机 30元/年
高端软件开发 = 年薪十万不是梦   
共有 225 人关注过本帖
标题:怎么使用MFC的CObArray?(问题已解决)
收藏  订阅  推荐  打印
VanHorn
Rank: 3Rank: 3
等级:中级会员
帖子:151
积分:2038
注册:2008-1-8
怎么使用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的值就不正常了。源代码附在下面了。各位大虾,救救我。。。

[ 本帖最后由 VanHorn 于 2008-7-28 20:18 编辑 ]
附件: 只有本站会员才能下载或查看附件,请您 登录注册
2008-7-28 14:51
VanHorn
Rank: 3Rank: 3
等级:中级会员
帖子:151
积分:2038
注册:2008-1-8

我在一楼的错误是重载等号运算符。等号运算符的重载类型应该是void operator=

我用VC++6我怕谁?
2008-7-28 20:21
共有 224 人关注过本帖
关于我们 | 广告合作 | 编程中国 | 清除Cookies | Archiver | WAP | TOP

编程中国 版权所有,并保留所有权利。鲁ICP备08000592号
Powered by Discuz, Processed in 0.085052 second(s), 9 queries.
Copyright©2004-2008, BCCN.NET, All Rights Reserved