关于AcDialogBar的问题,高手来讨论讨论吧
如果在ARX中直接利用AcDialogBar,可以在CAD窗口中显示;但是<BR>用Dialogbar做成了一个动态链接库DLL,在另外的arx程序中想调用这个Dialogbar,显示在cad窗口中,但是却不能成功,造成CAD崩溃,为什么?<BR>同样的Dialogbar dll,却可以在EXE程序中成功调用,想知道为什么<BR>为什么生成一个DialogBar做成动态链接库供ARX调用就不行了呢?<BR> 原因找到:arx调用DLL,显示对话框,只能在release版本中才能实现但具体为什么,还不知道,哪位高手能指点指点 Microsoft DLL本身的设计问题, 调用DLL一定要分debug和release版本, 并且两个DLL版本还要匹配, 还因为AutoCAD本身是release build, 所以为其设计的DLL都要匹配为release build, 不然不保证运行.. 但是,编的ARX用debug版的却可以的啊
而且,如果只能用release的话,那岂不是不能调试了???
怪栽 是不保证运行, 不是一定不运行.
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看. 多谢各位的指导
欧今天又试了将DockBar做成像ms.net那样拉帘式的,就是说,可以自动缩回去的
利用了三个定时器,可惜,在CAD中不成功,不知道各位有没有试过
同样的效果,在EXE中可以实现,也许是CAD的消息,我没有处理还是别的原因?
希望各位大大多多帮忙,完成后,我会发上来供大家学习的。 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的显示就可以了, 应该无须定时器这么重大. 谢谢你的忠告。
不知道你有没有这方面的代码参考参考? 代码偶是没有, 不过你可以去一个叫CodeProject的地方看一个叫MousePos的东西..
去MSDN查一下GetCursorPos这个函数..偶想了一下, 大致的思路就是按dock bar的大小位置定义一个屏幕方块, 然后窗口在处理WM_MOUSEMOVE时候GetCursurPos, 然后根据其返回数据判定鼠标是否在定义方块内..dock bar的显示/隐藏应该有定义好的函数可用..
不过偶是想想而已, 现在没有那么多时间试着真的做这些东西出来..在这些功能上面还是Delphi好用, 直接一个OnMouse函数就什么都解决了..
页:
[1]