Tvorba uživatelského rozhraní

Přehled informací

Prostředky použitelné při tvorbě uživatelského rozhraní

Při tvorbě dialogového rozhraní můžeme využívat služeb standartních dialogových oken Visual C++ nebo používat rozšířený sytém Autodesku. Aba dva systémy je možné, z programátorského pohledu použítí, považovat za ekvivalentní. V dalším výkladu budeme používat MFC systém firmy Autodesk.

MFC systém Autodesku pro tvorbu uživatelského rozhraní je rozdělen do dvou knihoven:

AdUi rozšiřuje standartní MFC knihovnu. Aby bylo možné používat třídy, funkce a proměnné z AdUi a AcUi musí být do projektu importovány soubory knihoven adui.h, adui15.lib (viz nastavení projektu)

Třídy implementované v AdUi nabízí:

Obecný postup tvorby ObjectARX MFC aplikace

Dialogové panely se mohou v aplikaci vyskytovat ve dvou podobách:

V dalším výkladu se budeme zabývat použítím modálních dialogových oken.

Vytvoření kostry aplikace s dialogovým oknem

  1. Pro vytvoření aplikace využijeme služeb pomocníka pro vytvoření nového projektu ObjectARX ve Visual C++. Postup tvorby:
  2. Pomocník vytvoří kostru aplikace připravenou na přidání dialogových prvků.
  3. Otevřete si soubor se stejným jménem jako má vytvořený projekt s koncovkou .cpp. Na začátek tohoto souboru musíme přidat příkaz pro importování knihovny (obsahuje podporu pro snažší správu zdrojů):
    #include "AcExtensionModule.h" 
  4. Přidáme funkci pro vytvoření dialogu, která bude přibližně následujícího tvaru (jména tříd se mohou u Vaší funkce lišit):
      // Vyvolání dialogu
      void vytvorDialog()
      {
        // vytvářený dialog bude typu modalní dialog
        CZadaniDialog dlg(CWnd::FromHandle(adsw_acadMainWnd()));
        int nReturnValue = dlg.DoModal();
      }
    
  5. Do funkce aktivované při inicializaci AcExtensionModule.h InitApplication() dopíšeme následující kód:
      void InitApplication();
      {
        novyDialogDLL.AttachInstance()
        CAcModulResourceOverride resOverride;
        acedRegCmds->addCommand("jméno_skupiny_příkazů",
                    "jméno_příkazu,
                    "jméno_příkazu",
                    ACRX_CMD_MODAL,
                     jméno_funkce_vytvořené_v_bodu_4,
                    NULL,
                    -1,
                    novyDialog.ModuleResourceInstance());
      }
    

    Poznámka - označení novyDialogDLL se ve Vaší aplikaci může lišit (pokud jste zadali jiný název projektu), zjistíte ho ve volání rozšířeného modulu objektu (vygenerováno na začátku souboru):

    AC_IMPLEMENT_EXTENSION_MODULE(novyDialogDLL);
  6. Do funkce aktivované při odstranění aplikace, doplníme kód pro odsranění zdrojů:
    void UnloadApplication()
    {
      acedRegCmds->removeGroup("jméno_skupiny_příkazů");
      novyDialogDLL.DetachInstance();
    }
    
  7. Do příkazu switch, který odchytává zprávy z AutoCADu musíme přidat položku, která bude reagovat na zprávu kInitDialogMsg - inicializace dialogu:
    	case AcRx::kInitDialogMsg:
    		break;

Vytvoření dialogového okna pomocí App Studia

  1. Ve Visual C++ přidáme do projektu nový prostředek typu Dialog. Postup přidání dialogového prvku:

  2. Do novém dialogového okna vložíme všechny požadované prvky.
  3. Zkontrolujeme jednoznačnost ID prvků. Dialogové okno vlastností prvku, vyvoláme:

Vytvoření tříd a ovladačů

Když máme vytvořený dialog můžeme nechat vygenerovat pomocí pomocníka tříd Class Wizardu novou třídu pro dialog a přidat jednotlivé členské funkce. Postup:

  1. Dvojklikněte levým tlačítkem myši nad vytvořeným dialogovým oknem, zobrazí se následující dotaz:

    Na dotaz jestli chceme vytvořit novou třídu pro dialog odpovíme zatržením: "Create a new class" a zmáčkneme tlačítko OK.

  2. Otervře se dialogové okno New Classs dotazem pro zadání nového jména třídy:

    Do dialogu vyplníme jméno třídy a zkontrolujeme třídu, z které je naše třída odvozena (zatím CDialog). Zadané údaje potvrdíme tlačítkem OK.

  3. Dále musíme přidat do projektu hlavičkový soubor stejného jména, jako má projekt. Do souboru dopíšeme deklarace našich funkcí.
  4. Musíme vytvořit správce (ovladače) jednotlivých dialogových prvků a svázat je s jednotlivými prvky (pomocí Class Wizardu).
  5. Dopíšeme kód obslužných funkcí.

Nakonec nesmíme zapomenout změnit názvy dialogových prvků a rodičovské třídy dialogu (aby byly používány prvky AcUi a ne standartní prvky Visual C++) podle následujícího schématu:

Příklady tvorby aplikace s uživatelským rozhraním

Podrobný postup jak vytvořit aplikaci s uživatelským rozhraním naleznete v příkladě 3 (funkce s jednoduchým uživatelským rozhraním) a příkladě 4 (funkce s komplexním uživatelským rozhraním).