乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 152|回复: 9

使用DRX代码的选择错误?

[复制链接]

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-12 12:47:08 | 显示全部楼层 |阅读模式
你好
执行下面的代码会在Bricscad中产生错误:
我试图创建一个简单的对话框,设置一些参数,并在关闭该对话框后立即选择一些实体。按下OK对话框按钮后,我得到了一个错误
类CustomDialog:public OdStaticRxObject<ODDCommand><br>{<br>public:const OdString localName()const{return globalName();}
const-OdString-groupName()const{return-DD_T(“DRXGLOBAL”);}
const OdString globalName()const{return OdString(“test_dialog”);}
无效执行(OdEdCommandContext*pCmdCtx)
{
OdDbCommandContextPtr-pDbCmdCtx(pCmdCtx);//数据库访问的向下转换
ODBDatabasePtr-pDb=pDbCmdCtx->database();//当前数据库
OdDbUserIO*pDbIO=pDbCmdCtx->dbUserIO();
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CMyDialog-TestDlg(CWnd::FromHandle(sds_gethwnd())));
/*sds_name:ssname
sds_ssget(NULL、NULL、NULL和ssname)
sds_ ssfree(ssname)*/
OdDbSelectionSetPtr pFirstSel=pDbIO->select(DD_T(“选择第一组对象”),OdEd::kSelSingleEntity/*,0,OdString::kEmpty,&filter*/)
}
}
我缺少什么

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-12 21:06:05 | 显示全部楼层
这可能是一个线程问题,AFX_MANAGE_STATE(AfxGetStaticModuleState());当它超出范围时应该停用
,所以一旦它到达你的选择调用,它可能仍然在范围内,你调试了吗?
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-13 04:57:34 | 显示全部楼层
丹,你能发布一个工作程序吗?
谢谢您!
迈克
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-13 05:09:37 | 显示全部楼层
我已经检查了调试!当它尝试开始选择时,线程仍在对话框创建范围内。谢谢丹尼尔!!
//...
try
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
      CMyDialog StockDlg(CWnd::FromHandle(sds_getmainhwnd()));
StockDlg.DoModal();
}
catch(...)
{
}

OdDbSelectionSetPtr pFirstSel = pDbIO->select(DD_T(“Select first set of objects”), OdEd::kSelSingleEntity/*, 0, OdString::kEmpty, &filter*/);
//...
话筒
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-13 06:53:45 | 显示全部楼层
很好
另一种方法可能是添加一个方法,即代码0]
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-13 12:41:07 | 显示全部楼层
对于常规dll,可以使用Bricscad DRX轻松添加MFC对话框,如上所述(再次感谢Daniel!)。
这可能是扩展dll的等效代码(创建一个对话框并在关闭它以选择某些内容后自动关闭它)?
AFX_MANAGE_STATE(AfxGetStaticModuleState())不允许使用扩展dll。
有什么想法吗?
Mike
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-14 03:24:31 | 显示全部楼层
在这种情况下,您可以考虑放弃DRX并使用BRX,
BRX(希望是下一个版本)将具有处理从对话框中挑选和选择等操作的特殊控件。
I. e CAcUiSelectButton&CAcUiPickButton
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-14 03:41:58 | 显示全部楼层
不幸的是,BRX不适用于Bricscad Classic,因此我不得不继续使用DRX[1]
然后...
  1. #pragma once
  2. #include "MyDialog.h"
  3. //++--
  4. class CommandDoit : public OdStaticRxObject
  5. {
  6. public:
  7.   const OdString localName() const { return globalName(); }
  8.   const OdString groupName() const { return DD_T("DRXGLOBAL"); }
  9.   const OdString globalName() const { return OdString("doit"); }
  10.   void execute(OdEdCommandContext* pCmdCtx)
  11.   {
  12.     OdDbCommandContextPtr pDbCmdCtx(pCmdCtx);
  13.     OdDbDatabasePtr pDb = pDbCmdCtx->database();
  14.     OdDbUserIO* pDbIO = pDbCmdCtx->dbUserIO();
  15.     CMyDialog dlg(CWnd::FromHandle(sds_getmainhwnd()));
  16.     if(dlg.DoModal() == IDOK)
  17.     {
  18.       OdDbSelectionSetPtr pFirstSel = pDbIO->select(DD_T("Select first set of objects"),
  19.         OdEd::kSelSingleEntity);
  20.     }
  21.   }
  22. };

您甚至可以创建一个结构或类来保存实例,如果您需要调用AfxSetResourceHandle...
无论如何,我已经创建了一个示例项目,您可以看看。
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-14 03:55:46 | 显示全部楼层
简直,简直完美!
我尝试测试这是否适用于可停靠对话框。正常情况下是应该的!
再次感谢您!
迈克
回复

使用道具 举报

12

主题

63

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
111
发表于 2009-5-14 07:38:02 | 显示全部楼层
应该没问题,它几乎和我在这个CDockBar中使用的设置一样
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-6 00:55 , Processed in 0.158678 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表