找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 586|回复: 2

[求助]:有关词典的问题

[复制链接]
发表于 2005-11-13 22:19:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
今天遇到了又一个奇怪的问题,
AutoCAD数据库中有一个命名对象词典,我自己创建了一个词典,我在自己的词典中添加了10条记录,然后我将自己的词典加入到命名对象词典中。之后我用一个程序去遍历我刚才加入的哪个词典,能得到刚才加入的10条记录,但顺序不对,第一条记录跑到最后去了,实在是太奇怪了。代码如下:
int i,j,k;
  CString Size1,Size2;
  //创建尺寸表
  AcDbDictionary* pNamedobj;
  acdbHostApplicationServices()->workingDatabase()->
    getNamedObjectsDictionary(pNamedobj,AcDb::kForWrite);
  AcDbDictionary* pDict;
  AcDbObjectId DictId,XrecId;
  AcDbXrecord* pXrec;
  struct resbuf* rbx;
  if(pNamedobj->getAt("SIZE_TABLE",(AcDbObject*&)pDict,AcDb::kForWrite)==
    Acad::eKeyNotFound)
  {
    pDict=new AcDbDictionary;
    pNamedobj->setAt("SIZE_TABLE",pDict,DictId);
    //添加记录
    if(pDict)
    {
      pXrec=new AcDbXrecord;
      rbx=acutBuildList(
        AcDb::kDxfText,"尺码",
        AcDb::kDxfInt32,3,
        AcDb::kDxfText,"S",
        AcDb::kDxfText,"M",
        AcDb::kDxfText,"L",
        AcDb::kDxfText,"XL",
        AcDb::kDxfText,"XXL",
        AcDb::kDxfText,"XXXL",
        0);
      pXrec->setFromRbChain(*rbx);
      pDict->setAt("SIZEMODE",pXrec,XrecId);
      pXrec->close();
      CString temStr;
      for(i=1;i<10;i++)
      {
        temStr.Format("%d",i);
        Size1="尺寸"+temStr;
        Size2="SIZE"+temStr;
        pXrec=new AcDbXrecord;
        rbx=acutBuildList(
          AcDb::kDxfText,Size1,
          AcDb::kDxfInt32,0,
          AcDb::kDxfInt32,0,
          AcDb::kDxfInt32,0,
          AcDb::kDxfInt32,0,
          AcDb::kDxfInt32,0,
          AcDb::kDxfInt32,0,
          AcDb::kDxfInt32,0,
          0);
        pXrec->setFromRbChain(*rbx);
        pDict->setAt(Size2,pXrec,XrecId);
        pXrec->close();
      }         
    }
    pDict->close();
  }
//此词典中有10条记录



//下面读词典
      pNamedobj->getAt("SIZE_TABLE",DictId);
            acdbOpenObject(pDict,DictId,AcDb::kForRead);
            xRecItor=pDict->newIterator();
            pDict->close();
            for(; !xRecItor->done();xRecItor->next())
            {
              xRecItor->getObject((AcDbObject*&)pXrec,AcDb::kForRead);
              pXrec->rbChain(&rbx);
              pXrec->close();
              sprintf(buf,rbx->resval.rstring);
              pgModBar->m_wndTree.InsertItem(buf,subRoot);
            }
            delete xRecItor;

期望得到的记录顺序:

尺码
尺寸1
尺寸2
尺寸3
尺寸4
尺寸5
尺寸6
尺寸7
尺寸8
尺寸9

但实际得到的顺序:
尺寸1
尺寸2
尺寸3
尺寸4
尺寸5
尺寸6
尺寸7
尺寸8
尺寸9
尺码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-11-15 08:50:55 | 显示全部楼层
pgModBar->m_wndTree是不是设置了‘排序’属性。看你实际得到的顺序,很明显是按字母顺序排序的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-11-15 12:25:29 | 显示全部楼层
原因已分析出,正如你说的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-23 02:15 , Processed in 0.381745 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表