画图时为每个对象分配一个唯一的32位ID怎么实现?

liguangqang 2009-11-20 12:33:44
在c# int id= GetHashCode() 在MFC好像没有,有没简单的办法?

有网友说用句柄,因在构造时要用ID,句柄应该是不行的。
用变量加1,数量上是够了,变量放在CDoc类,元数类怎样获得当前CDoc类的实列?
在载入文件时产生构造,这个变量会加大很多。长时间载入变量就可能不够?
...全文
129 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
gamedragon 2009-11-20
  • 打赏
  • 举报
回复
就用每个对象的指针就行了。
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
我记得有些类型应该是没有句柄的,当然实例化后会分配内存,有些类只有指向这个内存的指针。
如修改后保存修改部分在缓冲区内,当要取消时就得获取被修改部分的ID,并把保存在缓存中的返回去。
江川 2009-11-20
  • 打赏
  • 举报
回复
不管你什么类型的对象,每次实例化都有一块不同的内存,而句柄就是指向这块内存的,所以一定会不一样的。你关键问题是你每次new的时候对象的ID自己去去标识就可以了。
我以前做组态系统图形组态,上千上万个子图形都没问题,包含分组等,都是用此类方法。
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
如点一下产生个对象,上面的代码中构造函数的参数怎么传入?
如从文件中装载后,会不会和 new 的重复呢?
江川 2009-11-20
  • 打赏
  • 举报
回复
请你弄清楚属性和句柄的区别,你的ID标识是属性标识,和句柄的DWORD不相关。
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
我是从这个类派生的,我好像这个类没有句柄,用句柄来做ID好像不行。
江川 2009-11-20
  • 打赏
  • 举报
回复
class CMyObject : public CObject
{
public:
CMyObject(const int nID) { m_nID = nID; };
void SetID(const int nID) { m_nID = nID; };
int GetID() const { return m_nID; };

private:
int m_nID;

};


CMyObject *pObject = new CMyObject(1);
m_list.Add(pObject);

CMyObject *pObject1 = new CMyObject(2);
m_list.Add(pObject1);

这里pObject就是对象的实例化,而pObject接口setid就是对这个类的区分。
list可以根据这个ID找到你的单个ID的。清楚了吗?
MoXiaoRab 2009-11-20
  • 打赏
  • 举报
回复
CObject?怎么扯到这个上面去了
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
CObject 实例化后就有句柄? 能否给个实现的代码。
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
CObject 实例化后就有句柄?
江川 2009-11-20
  • 打赏
  • 举报
回复
类的实例化后就有句柄的啊。
而你可以定义类的接口和成员为ID,标识这个类对象
实例化和标识的接口ID还是有区别的。
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
我的元素是从CObject 中继承来的,好像这个基类不存在句柄。
我想在构造时分配ID,并存盘。
江川 2009-11-20
  • 打赏
  • 举报
回复
你文件中定义ID,按照顺序来,然后工程中间实现你的控件,定义接口
SetID, GetID,但是这个存储的是你的文件中的标识ID,程序运行的时候会动态指派一个对象存储的指针ID,这个句柄ID和你所说的ID不是同一个概念。
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
我是要ID来查找元素,哪个ID在哪里呀
江川 2009-11-20
  • 打赏
  • 举报
回复
其实你不管什么时候读取,编译器都会自动给你分派一个ID的,只要你是一个对象,不会重复的,这些你都不用考虑。
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
直接定义一个静态int对象,然后每个对象继承这个类的时候++操作
DWORD 范围是 0 - 4294967295,十六进制是 0x00000000 - 0xffffffff,相信你要超哥这个范围难以做到

如从文件中加载对象,这样会产生重复。
江川 2009-11-20
  • 打赏
  • 举报
回复
直接定义一个静态int对象,然后每个对象继承这个类的时候++操作
DWORD 范围是 0 - 4294967295,十六进制是 0x00000000 - 0xffffffff,相信你要超哥这个范围难以做到
liguangqang 2009-11-20
  • 打赏
  • 举报
回复
对象还没产生,哪有指针呀

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧