找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 413|回复: 2

[ARX程序]:请教Hellow!

[复制链接]
发表于 2005-4-12 12:46:28 | 显示全部楼层 |阅读模式

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

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

×
请问如何在ARX里如何使用Cj609 或者BCG 或者Xtrem 这些界面库做停靠窗体和工具栏这些!
谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-12 22:28:45 | 显示全部楼层
这个问题问的比较范,不太好回答,希望以后不要问这样的问题,否则,可用的回复会很少,最好就一个具体的问题展开讨论。我就以下点着重说明一下:
1、XTreme Toolkit的前身就是CJ60库它的设计思路基本上沿着MFC走的,所以不论MFC的从兼容性还是各子构件的独立性上,都比较好用。它既适合于独立的、新开发的系统,也适合于非独立、既有系统的改进。
2、BCG库在设计上,跟MFC有一定差距,但系统性极好,几乎所有子构件间都有一定的关联性。所以在使用上与XTreme Toolkit有些差别:主要的构件(如框架窗体、工具条、菜单条、可停靠面板等)只能用于独立的系统,因为它们之间的关联太强,不好拆开。
3、这两种库中的小构件(如组合框、按钮、任务面板等)均可以独立使用。用法跟普通MFC控件的用法完全一样:定义类变量->变量与控件的映射->用类变量操纵控件以及消息处理。
4、对于工具条、菜单条、可停靠面板等停靠系统所属构件,只有XTreme Toolkit库可用于非独立系统,因为这些构件都要与主窗体关联,且需要主窗体提供某些特殊功能。对于ARX,CAD主窗体的功能是死的且不可改变(或许可以,但至少我没做出来)。而XTreme Toolkit库对此问题作了变通的方法,使得我们可以用钩子和虚函数等方法将标准CMDIFrameWnd类动态转换为其它派生类,并将对标准CMDIFrameWnd的扩充功能转接到新类实例上...
5、说了这么多,不知你明白了没?可能没明白!下面就CJ60库说一下工具条的创建过程:
(1)、用向导生成一个消息处理器窗口:CMsgWnd    *pOwner;
(2)、创建工具条过程:
extern CCJToolBar *pgToolBar;
void ToolBar()
{
        CMDIFrameWnd *pFrm=acedGetAcadFrame();
        if(pgToolBar==NULL)
        {
                pgToolBar=new CCJToolBar;
                pgToolBar->Create(pFrm);
                pgToolBar->SetWindowText(_T("工具条"));
                AfxSetResourceHandle(GetModuleHandle("bartest.arx"));
                pgToolBar->LoadToolBar(IDR_TOOLBAR);
                CMsgWnd *pOwner=GetMsgWnd();//创建消息处理器窗口
                pgToolBar->EnableDocking(CBRS_ALIGN_ANY);
                pFrm->EnableDocking(CBRS_ALIGN_ANY);
                pFrm->DockControlBar(pgToolBar);
                pFrm->ShowControlBar(pgToolBar,TRUE,FALSE);
                pgToolBar->SetOwner(pOwner);//设置工具条的拥有者为消息处理器窗口,此句必须

                AfxSetResourceHandle(acedGetAcadResourceInstance());
        }
        else
        {
                if(!pgToolBar->IsVisible())
                        pFrm->ShowControlBar(pgToolBar,TRUE,FALSE);
        }
}
(3)、所有工具条的命令处理和按钮状态更新,在消息处理器窗口中处理。
(4)、工具条销毁:
CMDIFrameWnd *pFrm=acedGetAcadFrame();
        if( pFrm!=NULL && ::IsWindow(pFrm->GetSafeHwnd()) )
        {

                if(pgToolBar!=NULL && IsWindow(pgToolBar->GetSafeHwnd()) )
                {
                        pgToolBar->DestroyWindow();
                        delete pgToolBar;
                        pgToolBar=NULL;
                }
                pFrm->RecalcLayout();
        }

希望通过上面的例子,能举一反三,因为CJ60库最简单易用的,XTreme Toolkit比他要复杂一些。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-13 12:58:05 | 显示全部楼层
首先谢谢hellow的解答
我明白你的意思,我就是给那个与窗口关联的东西给挡住了!
对于工具条、菜单条、可停靠面板等停靠系统所属构件,只有XTreme Toolkit库可用于非独立系统,因为这些构件都要与主窗体关联,且需要主窗体提供某些特殊功能。对于ARX,CAD主窗体的功能是死的且不可改变(或许可以,但至少我没做出来)。
用CJ609做的停靠窗口在清华大学的那套teamdesinger已经做出来了,我想问的是它如何用CJ这个
库脱离与与主窗体关联做出停靠的效果,还请大家指点一下
另外你是如何用钩子和虚函数的方法使用Xtrem做出停靠窗体的!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 13:29 , Processed in 0.189174 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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