Archicad插件开发-非模态窗口使用教程

首先我们定义窗口类,代码如下:

class CExportDetailDlg : public DG::Palette,
    public DG::PanelObserver,
    public DG::CompoundItemObserver,

{
public:
    CExportDetailDlg();
    virtual ~CExportDetailDlg();
    static const GS::Guid& ODLBPaletteGuid();
    static CExportDetailDlg& GetInstance();
    
    virtual void    PanelOpened(const DG::PanelOpenEvent& ev) override;
    virtual    void    PanelCloseRequested(const DG::PanelCloseRequestEvent& ev, bool* accepted) override;
};
//32497 为grc文件中定义的对话框资源
CExportDetailDlg::CExportDetailDlg() :
        DG::Palette(ACAPI_GetOwnResModule(), 32497, ACAPI_GetOwnResModule(), ODLBPaletteGuid())
{
     this->Attach(*this);// init observer
     AttachToAllItems(*this);
     
     this->BeginEventProcessing();
}

CExportDetailDlg::~CExportDetailDlg()
{
    this->EndEventProcessing();
    this->Detach(*this);
    DetachFromAllItems(*this);
}

const GS::Guid& CExportDetailDlg::ODLBPaletteGuid() {
     // We need a fix and unique GUID to construct the palette to make it dockable.
     //{6D609256-3F40-4E11-BD3E-2985D238D4C0}
     static GS::Guid guid("6D609256-3F40-4E11-BD3E-2985D238D4C0");
     return guid;
}

CExportDetailDlg& CExportDetailDlg::GetInstance()
{
    static CExportDetailDlg    instance;
    return instance;
}

void CExportDetailDlg::PanelOpened(const DG::PanelOpenEvent& /*ev*/)
{
    SetClientSize(GetOriginalClientWidth(), GetOriginalClientHeight());
}

void CExportDetailDlg::PanelCloseRequested(const DG::PanelCloseRequestEvent& /*ev*/, bool* /*accepted*/)
{
    Hide();
}

跟模态窗口一样我们在grc文件中定义对话框资源

'GDLG'  32497  Palette | close        0    0  360  170  "构件详图 " 
{
/* [ 1] */ Button            260        135        90        24        LargePlain    "确定"
/* [ 2] */ Separator            15        115        330        2
/* [ 3] */ Button            160        15        150        24        LargePlain    "前往选择"
/* [ 4] */ RadioButton            15        15        140        24        LargePlain    1        "框选平面范围出物料 "
/* [ 5] */ RadioButton            15        50        120        24        LargePlain    1        "整层出物料 "
/* [ 6] */ RadioButton            15        85         120        24        LargePlain    1        "整楼出物料 "
}

窗口显示

CExportDetailDlg::GetInstance().Show();

控件以及控件事件处理请参考模态窗口处理。

给定引用中未提及在Archicad软件二次开发使用MFC进行界面开发的方法。不过,一般而言,在Archicad软件二次开发使用MFC进行界面开发可能会涉及以下方面: 首先要搭建开发环境,需要安装支持MFC开发的Visual Studio版本,同时要确保已经获取了Archicad的二次开发SDK,该SDK包含了与Archicad交互所需的头文件、库文件等资源。 接着创建MFC项目,在Visual Studio中选择创建MFC应用程序项目,根据实际需求选择合适的项目类型,如对话框应用程序等。 之后进行界面设计,利用MFC的资源编辑器来设计界面,添加各种控件,如按钮、文本框、列表框等,设置它们的属性和布局。 在代码层面,要实现与Archicad的交互,通过Archicad SDK提供的接口函数,从MFC界面中获取用户输入的数据,并将其传递给Archicad进行相应的操作,同时也可以从Archicad获取数据并显示在MFC界面上。 还需要处理事件,为MFC界面上的控件添加事件处理函数,当用户操作控件时,触发相应的事件处理逻辑,实现用户与界面的交互。 示例代码如下(简单示意与Archicad交互的思路): ```cpp #include <afxwin.h> // 假设这里引入Archicad的SDK头文件 #include "ArchicadSDK.h" class CMyDlg : public CDialogEx { // 构造函数等省略 // 控件变量 CButton m_btnSubmit; CEdit m_edtInput; // 事件处理函数 afx_msg void OnBtnSubmit(); DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CMyDlg, CDialogEx) ON_BN_CLICKED(IDC_BUTTON_SUBMIT, &CMyDlg::OnBtnSubmit) END_MESSAGE_MAP() void CMyDlg::OnBtnSubmit() { CString inputText; m_edtInput.GetWindowText(inputText); // 调用Archicad的接口函数,将输入数据传递给Archicad // 假设这里有一个Archicad的接口函数 ArchicadFunction(inputText.GetBuffer()); inputText.ReleaseBuffer(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值