| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2411 人关注过本帖
标题:怎么使用MFC的CObArray?(问题已解决)
取消只看楼主 加入收藏
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
 问题点数:0 回复次数:1 
怎么使用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)
搜索更多相关主题的帖子: CMyTestOb MFC CObArray 源码 num 
2008-07-28 14:51
VanHorn
Rank: 1
等 级:新手上路
帖 子:152
专家分:0
注 册:2008-1-8
收藏
得分:0 
我在一楼的错误是重载等号运算符。等号运算符的重载类型应该是void operator=

我用VC++6我怕谁?
2008-07-28 20:21
快速回复:怎么使用MFC的CObArray?(问题已解决)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025902 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved