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 - nezávislý na AutoCADu, větší část funkčnosti,
- AcUi - obsahuje specifický vzhled a chování.
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í:
- změnu velikosti dialogového boxu,
- stálost dialogových dat,
- interakci dialogu s výkresovým editorem,
- bitmapová tlačítka,
- statická bitmapová tlačítka,
- bitmapová tlačítka, které mají drag and drop strany,
- bitmapová tlačítka stylu - nástrojová lišta,
- vlastnická tlačítka,
- podporu pro dialogy typu ToolTips,
- podporu pro dialogy typu TextTips,
- podporu pro dialogy typu DrawTips,
- uživatelské zasílání zpráv,
- přístup k registrům.

Obecný postup tvorby ObjectARX MFC aplikace
Dialogové panely se mohou v aplikaci vyskytovat ve dvou podobách:
- dialalogové okna typu modal - dokud nejsou po otevření uzavřena,
nelze provádět žádná činnost mimo okno,
- dialogové okna typu modeless - mohou zůstat otevřená a uživatel mezitím
může pracovat (nemusí se zavřít).
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
- Pro vytvoření aplikace využijeme služeb pomocníka pro vytvoření nového projektu
ObjectARX ve Visual C++. Postup tvorby:
- otevřeme Visual C++,
- z nabídky File vyberte položku New,
- v kartě Project vyberte typ projektu ObjectARX 2000
AppWizard,
- zadejte jméno např. novyDialog, případně změňte umístění,
- potvrďte zadané hodnoty tlačítkem OK,
- otevře se druhé dialogové okno, v kterém si zkontrolujte správné zadání
zvýrazněných hodnot. Nezapomeňte zadat hodnotu do editovacího pole Your
Registered Developer Symbol. Pokud nejste registrováni u firmy Autodesk,
zadejte zde libovolnou trojici - čtveřici znaků, kterými bude začínat prefix
Vámi definovaných tříd.

- zkontrolujte si zadané hodnoty a zmáčkněte tlačítko Finish.
- Pomocník vytvoří kostru aplikace připravenou na přidání dialogových prvků.
- 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"
- 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();
}
- 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);
- 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();
}
- 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
- Ve Visual C++ přidáme do projektu nový prostředek typu Dialog. Postup
přidání dialogového prvku:
- otvřeme nabídku Insert,
- z nabídky vybereme položku Resource..., otevře se dialogové
okno Resoures,

- z dialogu vybereme prostředek Dialog a zmáčkneme tlačítko
New,

- vytvoří se nový dialogový prvek.

- Do novém dialogového okna vložíme všechny požadované prvky.
- Zkontrolujeme jednoznačnost ID prvků. Dialogové okno vlastností prvku, vyvoláme:
- umístíme kurzor myši nad prvek, u kterého potřebujeme změnit vlastnosti,
- klikneme pravým tlačítkem myši, zobrazí se plovoucí nabídka, z které
vybereme položku Properties..,
- otevře se dialogové okno Properties pro zvolený dialogový
prvek. V dialogovén okně můžeme měnit všechny dostupné vlastnosti.


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:
- 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.
- 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.
- 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í.
- Musíme vytvořit správce (ovladače) jednotlivých dialogových prvků a svázat
je s jednotlivými prvky (pomocí Class Wizardu).
- 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:
- CDialog -> CAcUiDialog,
- CComboBox -> CAcUiSymbolComboBox,
- CListBox -> CAcUiListBox,
- CButton -> CAcUiPickButton,
- CEdit -> CAcUiNumericEdit atd. (všechny typy prvků je možné nalézt v
dokumentaci k ObjectARX),

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).
