c++ ObjectARX 二次开发

[转载]objectARX创建 PaletteSet 停靠面板示例

22 03月
作者:admin|分类:ObjectARX

 objectARX创建 PaletteSet 停靠面板示例

图文By edata ,转载注明出处 http://www.cnblogs.com/edata

部分代码参考张帆《AutoCAD ObjectARX(VC)开发基础与实例教程》

addpaletteset.png

//001.修改msxml为msxml6
//- Import the MSXML functionality
#import "msxml6.dll" named_guids
//using namespace MSXML ;
//002.#define MSXML 为 MSXML2
#define MSXML MSXML2
//-----------------------------------------------------------------------------
//- Used to add a dialog resource
int CMyPalette1::OnCreate (LPCREATESTRUCT lpCreateStruct) {
    if ( CAdUiPalette::OnCreate (lpCreateStruct) == -1 )
        return (-1) ;
    //- Create it and set the parent as the dockctrl bar
    //003 资源覆盖,显示ClildDlg.ShowWindow
    CAcModuleResourceOverride myResource;
    mChildDlg.Create (IDD_MYPALETTE1, this) ;
     
    CRect rect ;
    GetWindowRect (&rect) ;
    //- Move the window over so we can see the control lines
    mChildDlg.ShowWindow(SW_SHOW);
    mChildDlg.MoveWindow (0, 0, rect.Width (), rect.Height (), TRUE) ;
    return (0) ;
}
//- Called by AutoCAD to steal focus from the palette
bool CMyPalette1::CanFrameworkTakeFocus () {
    //- Not simply calling IsFloating() (a BOOL) avoids warning C4800
    //return (GetPaletteSet ()->IsFloating () == TRUE ? true : false) ;
    //004 设置切换焦点 无论是否停靠均能正常切换焦点
    return true ;
}
//005.添加面板
#include "MyPaletteSet.h"
#include "MyPalette1.h"
#include "MyPalette2.h"
 
//-----------------------------------------------------------------------------
 
//006. 定义面板集全局变量
CMyPaletteSet *g_pPaletteSet=NULL;
CMyPalette1 *g_pPalette1=NULL;
CMyPalette2 *g_pPalette2=NULL;
//008. 销毁选项板
        if (g_pPaletteSet != NULL)
        {                  
            g_pPaletteSet->DestroyWindow();
            delete g_pPaletteSet;
            g_pPaletteSet = NULL;              
        }
//007 创建面板集
        if (!g_pPaletteSet)
        {
            // 创建palette set
            g_pPaletteSet = new CMyPaletteSet;
            CRect rect(0, 0, 90, 400);      // 初始大小
            g_pPaletteSet->Create(TEXT("自定义选项板"),
                WS_OVERLAPPED | WS_DLGFRAME,
                rect,
                acedGetAcadFrame(),
                PSS_EDIT_NAME |
                PSS_PROPERTIES_MENU |
                PSS_AUTO_ROLLUP |
                PSS_CLOSE_BUTTON
                );
            // 选项板1
            g_pPalette1 = new CMyPalette1();  // 自定义的选项板
            g_pPalette1->Create(WS_CHILD | WS_VISIBLE, TEXT("选项板1"), g_pPaletteSet, PS_EDIT_NAME);          
            g_pPaletteSet->AddPalette(g_pPalette1);// 添加到选项板集合
            // 选项板2
            g_pPalette2 = new CMyPalette2();    // 自定义的选项板
            g_pPalette2->Create(WS_CHILD | WS_VISIBLE, TEXT("选项板2"), g_pPaletteSet, PS_EDIT_NAME);          
            g_pPaletteSet->AddPalette(g_pPalette2);
            // 显示选项板集合
            g_pPaletteSet->EnableDocking(CBRS_ALIGN_ANY);           
            g_pPaletteSet->RestoreControlBar();
        }
        acedGetAcadFrame()->ShowControlBar(g_pPaletteSet, TRUE, FALSE);
        // 设置透明度
        if (g_pPaletteSet->GetOpacity() != 100)
        {
            g_pPaletteSet->SetOpacity(100);
        }
        //设置面板停靠后的最小宽度 ARX2012开始新增函数
        AdUiSetDockBarMinWidth(90);


浏览3022 评论0
返回
目录
返回
首页
[转载]动态块的真实名称EffectiveName [转载]objectARX 关于MFC类向导 无法向此非CCmdTarget派生类添加任何命令 的解决方式

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。