![]()
Pomocník nám vygeneroval kostru aplikace. V kostře aplikace je již inicializovaná podpora knihovny 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
}
Také je již připravena vstupní funkce pro 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;
}
Do aplikace tedy stačí doplnit pouze:
![]()
Vytvořte nový dialogový prvek pomocí App Studia. Pokud neznáte postup prostudujte si lekci Tvorba uživatelského rozhraní. Nový prvek by měl vypadat přibližně následujícím způsobem:
ID označení a typ jednotlivých prvků:
Ostatní označení prvků dialogu není důležité (v programu ho nevyužíváme). Po dokončení tvorby dialogového okna nad ním dvakrát klikněte myší, zobrazí se okno Adding a Class pomocníka tříd (viz obrázek).

V okně jsme dotazování jestli požadujeme vytvořit novou třídu pro dialog. V dialogovém okně Adding a Class zatrhněte: "Create a new class" a zmáčkneme tlačítko OK. Otevře se druhé okno pomocníka.
Do okna zadejte:
Class Wizard vytvoří soubor se jménem ZadaniDialog.cpp a ZadaniDialog.h, v kterých bude uložena definice třídy dialogu. Otevře se okno MFC Class Wizard, které prozatím zavřeme.
![]()
Vytvoříme soubor, který bude obsahovat deklarace funkcí, které budeme používat v naší aplikaci. Zatím zde dopíšeme pouze deklaraci funkce vytvorDialg(). Soubor přidáme do projektu následujícím postupem:


#include "resource.h" // přidání hlavičkového souboru zdrojů
void vytvorDialog(); // deklarace hlavičky funkce
// pro vytvoření dialogu
![]()
Na začátek souboru reagujiciDialog.cpp musíme vložit hlavičkové soubory , abychom mohli využívat v nich deklarované funkce:
#include "AcExtensionModule.h" #include "ZadaniDialog.h" #include "reagujiciDialog.h"
![]()
Každá aplikace nahraná do AutoCADu musí registrovat příkazy, které definuje, v AutoCADu. Pokud bychom příkazy neregistrovali, nedali by se v AutoCADu vyvolat. Registrace příkazů se uvádí v části funkce acrxEntryPoint vyvolané zprávou kInitAppMsg poslanou AutoCADem do aplikace ObjectARX. V našem příkladě je při inicializaci vyvolaná funkce InitApplication(). Doplníme tedy do ní kód pro inicializaci nového příkazu v AutoCADu:
// 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" );
}
Ve funkci použijeme k registraci příkazu funkci addComand. Nakonec funkce je příkaz pro vytisknutí informací o způsobu spuštění programu.
![]()
Aplikace ObjectARX, musí po dokončení své činnosti (při odstranění z AutoCADu) odstranit všechny příkazy a třídy, které během své činnosti v AutoCADu vytvořila. Naše aplikace přidala do AutoCADu pouze nový příkaz, proto stačí odstranit pouze tento příkaz, případně celou skupinu příkazů. K tomuto účelu slouží funkce pro odstranění skupiny příkazů removeGroup. Do aplikace doplníme následující kód funkce UnloadApplication():
// uvolnění aplikace, odregistrování
void UnloadApplication()
{
// odstranění skupiny příkazů
acedRegCmds->removeGroup("Skupina_dialog");
}
![]()
Kód funkce vytvorDialog() nejprve vytvoří lokální kopii instance CAcModuleResourceOverride (přepíná mezi aktuálním a modulovým prostředkem. Když je vytvořen nový objekt, je nastaven nový prostředek zdroje. Po odstranění je přepnuto opět na původní zdroj). Dále vytvoří nový objekt pomocí konstruktoru dialogu. Nakonec funkce zobrazí dialgové okno jako modální:
// Vyvolání dialogu
void vytvorDialog()
{
// 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í
}
![]()
V tuto chvíli máme vytvořenou kostru nové aplikace. Aplikaci můžeme zkusit přeložit (ve VC++) a spustit (v AutoCADu). Po spuštění se nám zobrazí prázdný dialog. Dialog bude reagovat pouze na tlačítka Vložit a Cancel. Tlačítko Vložit nevloží žádný obrazec pouze zavře, stejně jako tlačítko Cancel, dialog.
![]()