助手为我们生成了应用程序框架。它已经在应用程序框架中初始化 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创建一个新对话框。如果您不知道程序,请学习 你的课 创建 用户界面。新元素应如下所示 通过以下方式:
名称ID和各个元素的类型:
对话框元素的其他名称并不重要(我们不在程序中使用它)。 创建对话框完成后,双击它以显示它 带窗户 新增课程 班级助理(见图)。
在窗口中,我们询问是否要创建一个新类 进行对话。在对话框中 新增课程 蜱: "Create 新班 " 然后按下按钮 OK.打开第二个帮助窗口。
在窗口中输入:
类向导 创建一个名称为 ZadaniDialog.cpp a ZadaniDialog.h ,其中将保存对话框类定义。打开 带窗户 MFC类向导 我们现在将关闭。
我们将创建一个文件,其中包含我们将使用的功能的声明 在我们的应用程序中。到目前为止,我们仅在此处编写函数声明 createDialg() . 我们将文件添加到项目中,如下所示:
#include "resource.h" // pøidání hlavièkového 文件 zdrojù void createDialog() ; // deklarace hlavièky funkce // pro vytvoøení dialogu
在文件的开头 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中)。启动后,将出现一个空的 对话。该对话框将仅对“插入”和“取消”按钮作出响应。插入按钮 不会插入任何形状,只会关闭,如“取消”按钮,对话框。