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(JednoduchyDialogDLL); // DLL Entry Point extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID /*lpReserved*/) { if (dwReason == DLL_PROCESS_ATTACH) { // inicializace MFC rozšíření Extension DLL JednoduchyDialogDLL.AttachInstance(hInstance); } else if (dwReason == DLL_PROCESS_DETACH) { // ukončení MFC knihoven před ukončením JednoduchyDialogDLL.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 (na obrázku jsou uvedeny i jednotlivé ID prvků dialogu):
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í zda 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 jednDialog.cpp a jednDialog.h, v kterých bude uložena definice třídy dialogu. Class Wizard doplní i základní kód pro obsluhu tlačítek, proto v našem prvním příkladě nemusíme dopisovat žádný obslužný kód tlačítek.
Na začátek souboru, za deklaraci funkcí InitApplication a UnloadApplication, doplníme deklaraci funkce, která bude vytvářet objekt nového dialogu:
void vytvorDialog();
Na začátek souboru, za deklaraci funkcí InitApplication a UnloadApplication, doplníme deklaraci funkce, která bude vytvářet objekt nového dialogu:
void vytvorDialog();
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("Dialogy", "_showDialog", "zobrazDialog", ACRX_CMD_MODAL, vytvorDialog); // zobrazení informace jak spustit aplikaci ads_printf( "\nAplikaci spustíte příkazem\"zobrazDialog\" .\n" ); }
Ve funkci použijeme k registraci příkazu funkci addComand. Jak jsme uvedli v předešlém příkladě, vytiskneme při inicializaci funkce, do příkazového řádku informaci, jakým způsobem spustit nahranou aplikaci.
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( "Dialogy" ); }
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í:
void vytvorDialog() { // Při nahrání prostředku z této aplikace ARX // vytvoří se lokální instance CAcModuleResourceOverride CAcModuleResourceOverride resOverride; jednDialog dlg(CWnd::FromHandle(adsw_acadMainWnd())); // vytvoření nového dialogu dlg.DoModal(); // nahraje a zobrazí dialog jako modální }
Zdrojový kód projektu je možné nahrát v zabaleném souboru jednoduchyDialog.zip. Nahraný kód musíte rozbalit a ve vývojovém prostředí Visual C++ otevřít soubor pracovního prostoru nebo projektu (vykresleniKruhu.dsw nebo vykresleniKruhu.dsp). Visual C++ poté načte celý projekt.
Doporučujeme Vám vyzkoušet si alespoň tvorbu projektu pomocí pomocníka a napsání několika řádek kódu, abyste poznali vývojové pomůcky prostředí Visual C++.