创建程序框架

信息概述

应用程序创建过程

助手为我们生成了应用程序框架。它已经在应用程序框架中初始化 MFC库支持:

  // definice prostého rozšíøení modulu objektu
  AC_IMPLEMENT_EXTENSION_MODULE(ReagujiciDialogDLL);
  // DLL Entry Point
  extern "C"
  BOOL WINAPI DllMain(HINSTANCE hInstance,
                      DWORD dwReason, LPVOID /*lpReserved*/)
  {
    if (dwReason == DLL_PROCESS_ATTACH)
    {
      // inicializace rozšíøení Extension DLL
      ReagujiciDialogDLL.AttachInstance(hInstance);
      InitAcUiDLL();
    } 
    else if (dwReason == DLL_PROCESS_DETACH) 
         {
           // ukonèení knihoven pøed ukonèením
           ReagujiciDialogDLL.DetachInstance();
         }
    return TRUE;    // ok
  }

AutoCAD acrxEntryPoint 的输入函数也已准备就绪:

  // ObjectARX EntryPoint
  extern "C" AcRx::AppRetCode 
   acrxEntryPoint (AcRx::AppMsgCode msg, void* pkt)
  {
    switch (msg) {
      case AcRx::kInitAppMsg:
        // odemknutí aplikace, aby ji bylo možné odstranit z pamìti
        acrxDynamicLinker->unlockApplication(pkt);
        acrxDynamicLinker->registerAppMDIAware(pkt);
         InitApplication() ;    // volání funkce inicializace
        break;
      case AcRx::kUnloadAppMsg:
        UnloadApplication();  // volání funkce odstranìní
        break;
    }
    return AcRx::kRetOK;
  }

仅添加以下内容就足够了:

使用App Studio创建一个新对话框

使用App Studio创建一个新对话框。如果您不知道程序,请学习 你的课 创建 用户界面。新元素应如下所示 通过以下方式:

名称ID和各个元素的类型:

对话框元素的其他名称并不重要(我们不在程序中使用它)。 创建对话框完成后,双击它以显示它 带窗户 新增课程 班级助理(见图)。

在窗口中,我们询问是否要创建一个新类 进行对话。在对话框中 新增课程 蜱: "Create 新班 " 然后按下按钮 OK.打开第二个帮助窗口。

在窗口中输入:

类向导 创建一个名称为 ZadaniDialog.cpp a ZadaniDialog.h ,其中将保存对话框类定义。打开 带窗户 MFC类向导 我们现在将关闭。

创建一个响应头文件Dialog.h

我们将创建一个文件,其中包含我们将使用的功能的声明 在我们的应用程序中。到目前为止,我们仅在此处编写函数声明 createDialg() . 我们将文件添加到项目中,如下所示:

  #include "resource.h" // pøidání hlavièkového  文件  zdrojù
  void  createDialog() ;  // deklarace hlavièky funkce 
                        // pro vytvoøení dialogu

将头文件插入到响应Dialog.cpp文件中

在文件的开头 responseDialog.cpp 我们需要插入头文件 这样我们就可以使用其中声明的功能:

  #include "AcExtensionModule.h"
  #include " ZadaniDialog.h "
  #include " responseDialog.h "

初始化功能代码完成

上传到AutoCAD的每个应用程序都必须注册其定义的命令, 在AutoCAD中。如果我们没有注册命令,则不会在AutoCAD中调用它们。 命令的注册在功能部分中指定 acrxEntryPoint 由消息触发 kInitAppMsg 由AutoCAD发送到ObjectARX。在我们的例子中 在初始化期间调用该函数 InitApplication() 。 所以我们添加 用于在AutoCAD中初始化新命令的代码:

  // inicializace aplikace, zaregistrování
  void  InitApplication() 
  {
    // zaregistrování nového pøíkazu
    acedRegCmds->addCommand("Skupina_dialog", 
                    "createDialog", 
                    "zadejHodnoty", 
                    ACRX_CMD_MODAL, 
                    vytvorDialog,
                    NULL,
                    -1,
                    ReagujiciDialogDLL.ModuleResourceInstance());
    
    // vypsání informaci jak spustit aplikaci
    ads_printf( "\nAplikaci spustíte pøíkazem\"zadejHodnoty\".\n" );		
  }

在函数中,我们使用函数来注册命令 addComand . 最后,该函数是用于打印有关程序启动方式的信息的命令。

填写最后调用的部分的代码 程序

操作完成后(从AutoCAD删除时),ObjectARX应用程序 删除在AutoCAD中操作期间创建的所有命令和类。 我们的应用程序仅向AutoCAD添加了新命令,因此您只需删除它 该命令或整个命令组。该功能用于此目的 删除一组命令 removeGroup . 我们将以下功能代码添加到应用程序中 UnloadApplication():

  // uvolnìní aplikace, odregistrování
  void UnloadApplication()
  {
    // 删除一组命令
    acedRegCmds->  removeGroup  ("Skupina_dialog");  
  }

添加创建对话框的函数代码

功能码 createDialog() 首先创建实例的本地副本 CAcModuleResourceOverride (在当前资源和模块资源之间切换。创建新对象后, 设置了新资源。删除后,将切换回原始 资源)。它还使用对话框构造函数创建一个新对象。最后,功能 将对话框显示为模式:

  // Vyvolání dialogu
  void  createDialog() 
  {
    // Pøi nahrání prostøedku z této aplikace ARX
    // vytvoøí se lokální instance CAcModuleResourceOverride
    CAcModuleResourceOverride resOverride;
    // vytváøený dialog bude typu modalní dialog
     CZadaniDialog  dlg(CWnd::FromHandle(adsw_acadMainWnd()));
                      // vytvoøení nového dialogu
    dlg.DoModal();    // nahraje a zobrazí dialog jako modální
  }

测试应用程序框架

目前,我们已经创建了新应用程序的框架。我们可以尝试申请 编译(在VC ++中)并运行(在AutoCAD中)。启动后,将出现一个空的 对话。该对话框将仅对“插入”和“取消”按钮作出响应。插入按钮 不会插入任何形状,只会关闭,如“取消”按钮,对话框。