乐筑天下

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

关于AcDialogBar的问题,高手来讨论讨论吧

[复制链接]

22

主题

71

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2005-3-27 15:33:00 | 显示全部楼层 |阅读模式
如果在ARX中直接利用AcDialogBar,可以在CAD窗口中显示;但是
用Dialogbar做成了一个动态链接库DLL,在另外的arx程序中想调用这个Dialogbar,显示在cad窗口中,但是却不能成功,造成CAD崩溃,为什么?
同样的Dialogbar dll,却可以在EXE程序中成功调用,想知道为什么
为什么生成一个DialogBar做成动态链接库供ARX调用就不行了呢?
回复

使用道具 举报

22

主题

71

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2005-3-27 17:55:00 | 显示全部楼层
原因找到:arx调用DLL,显示对话框,只能在release版本中才能实现
但具体为什么,还不知道,哪位高手能指点指点
回复

使用道具 举报

3

主题

97

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2005-3-28 12:03:00 | 显示全部楼层
Microsoft DLL本身的设计问题, 调用DLL一定要分debug和release版本, 并且两个DLL版本还要匹配, 还因为AutoCAD本身是release build, 所以为其设计的DLL都要匹配为release build, 不然不保证运行..
回复

使用道具 举报

22

主题

71

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2005-3-28 16:47:00 | 显示全部楼层
但是,编的ARX用debug版的却可以的啊
而且,如果只能用release的话,那岂不是不能调试了???
怪栽
回复

使用道具 举报

3

主题

97

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2005-3-28 18:24:00 | 显示全部楼层
是不保证运行, 不是一定不运行.
debug/release build的区别主要在一些macro的使用和变量内存处理上. 简单编的ARX如果不引用其他MFC AppWizard DLL, 不会包含什么和debug/release有关的macro, 等于说是debug/release build并没有什么区别, 但是用它引用其他DLL的时候另外的DLL里就可能包含和build有关的东西, 就可能会造成冲突.
两个build通常只是preprocessor definition里面不同而已, 一般偶都是把要调试的函数单独copy出来一份做成debug build, 这样一般都能跳过那些乱七八糟的macro. 具体的调试技巧其实都是随个人喜好, 你可以google看.
回复

使用道具 举报

22

主题

71

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2005-3-28 20:50:00 | 显示全部楼层
多谢各位的指导 欧今天又试了将DockBar做成像ms.net那样拉帘式的,就是说,可以自动缩回去的
利用了三个定时器,可惜,在CAD中不成功,不知道各位有没有试过
同样的效果,在EXE中可以实现,也许是CAD的消息,我没有处理还是别的原因?
希望各位大大多多帮忙,完成后,我会发上来供大家学习的。
回复

使用道具 举报

3

主题

97

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2005-3-29 14:52:00 | 显示全部楼层
EXE是独立进程, 要记得你在运行ARX的时候CAD才是你的EXE, 而不是ARX -- 因为ARX只是CAD的DLL. MFC EXE和它的子窗口之间的交流是MFC自动处理的, 但是ARX没有这些自动处理, 所以很多窗口/UI功能都要尽量在ARX呼叫的子窗口本身实现, 避免留给CAD.
不知道你具体想做成什么样的, AcUiDialogBar是CAD内用的类, 并不是一个很开放来给大家用的类, 所以相对的这个类的可实现控制就很少. 虽然不很确定你用三个定时器的是dock bar还是dialog bar, 但是MFC实际上提供获得当前鼠标信息的message, 所以只要不停地获得当前鼠标位置然后根据其所在区域调整dock bar的显示就可以了, 应该无须定时器这么重大.
回复

使用道具 举报

22

主题

71

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2005-3-29 15:46:00 | 显示全部楼层
谢谢你的忠告。
不知道你有没有这方面的代码参考参考?
回复

使用道具 举报

3

主题

97

帖子

1

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
109
发表于 2005-3-30 11:06:00 | 显示全部楼层
代码偶是没有, 不过你可以去一个叫CodeProject的地方看一个叫MousePos的东西..
去MSDN查一下GetCursorPos这个函数..偶想了一下, 大致的思路就是按dock bar的大小位置定义一个屏幕方块, 然后窗口在处理WM_MOUSEMOVE时候GetCursurPos, 然后根据其返回数据判定鼠标是否在定义方块内..dock bar的显示/隐藏应该有定义好的函数可用..
不过偶是想想而已, 现在没有那么多时间试着真的做这些东西出来..在这些功能上面还是Delphi好用, 直接一个OnMouse函数就什么都解决了..
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-5 07:56 , Processed in 0.156857 second(s), 70 queries .

© 2020-2025 乐筑天下

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