Kurz1 - Kapitola11

17. června 2007 v 16:07 | http://www.sweb.cz/kurz_evt/ |  Programování pro WinCE

3.5 Zdroje

Každý program pro Windows přináší ve svém .exe souboru kromě programového kódu i velké množství dat, která s instrukcemi procesoru nemají mnoho společného. V souboru téměř každého programu se skrývají informace, jako jsou např.:
  • textové řetězce,
  • ikony,
  • nabídky (menu),
  • popisy dialogových oken.
Tato data slouží jako zdroje (resources) pro algoritmus programu. Program je vybírá a používá pro zobrazení především grafických informací na displeji. Data jsou do .exe souboru vložena překladačem podle popisu, který je uložen ve zdrojových souborech resource.h a jmenoprojektu.rc.
V našem případě jsou zdroje popsány v souboru HexaView.rc. Pro nabídky je tam např. část, která popisuje nabídkové menu:
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//

IDM_MENU MENU DISCARDABLE
BEGIN
POPUP "&File"
BEGIN
MENUITEM "E&xit", IDM_FILE_EXIT
END
POPUP "&Help"
BEGIN
MENUITEM "&About", IDM_HELP_ABOUT
END
END
Po prohlédnutí obsahu souboru by se mohlo zdát, že zpracování zdrojů nutí programátora naučit se nový "jazyk" popisující zdroje programu. Naštěstí Visual C++ obsahuje grafický nástroj pro zpracování zdrojů.
My tedy nebudeme upravovat zdrojové texty, ale použijeme grafické rozhraní, které nabízí eVT. Na kartě se záložkou ResourceView jsou jednotlivé zdroje připraveny ke zpracování.

obr. 22 Karta zdrojů programu
Nás budou zajímat pouze některé položky. Postupně upravíme následující "zdroje":

3.5.1 Ikona

Poklepáním na položku IDI_HEXAVIEW se otevře grafický editor pro úpravu ikon. Nemělo by pro vás být problémem upravit si standardní ikonu podle vlastního vkusu - např. takto:

obr. 23 Velká ikona programu
Nezapomeňte si v okénku "Device" přepnout i na Small (16x16) a změnit i malou verzi ikony např.:

obr. 24 Malá ikona programu

3.5.2 Dialog About

Poklepáním na IDD_ABOUTBOX se otevře editor dialogů. Protože jsme již změnili ikonu, objevuje se její nová verze v dialogu. Zkontrolujte, zda vám dialog vyhovuje, případně si do něj můžete doplnit své jméno pomocí Static Text:
- zvolíme nástroj Static Text,
- v dialogu vyznačíme místo, kde bude umístěn požadovaný text,
- poklepem na nově vyznačený blok se otevře dialog pro změnu vlastností textu,
- v Editboxu "Caption" upravíme text podle přání a ukončíme Enterem.

obr. 25 Úprava dialogu "About"
Po překladu by se již měl objevit v programu nový dialog "About".

3.5.3 Nabídkový pruh

Poklepeme na položku IDM_MENU. Otevře se editor zdroje menu.
- Označte položku Help,
- Stisknutím klávesy Insert se před tuto položku vloží nová prázdná,
- Klepneme na ni a objeví se dialog s možností editace,
- Vyplňte do boxu Caption text &View. Znak & určuje "horkou klávesu" pro tuto položku.

obr. 26 Vložení nové položky menu
- Podobným způsobem vložíme další položky pod View podle obr. 27.
- Mezi 16 Columns a With Text vložíme jednu položku, která bude mít zatržen Separator.
- U položky With Text zatrhneme políčko Checked, protože začínáme s Textem.

obr. 27 Doplnění dalších položek nabídkového menu
Při uzavření dialogu po vložení boxu Caption za nás eVT automaticky vyplní identifikační číslo ID ve formě ID_názevpoložky. Při vytváření postupně přidává čísla vždy o 1 větší. Protože pro volbu počtu sloupců použijeme přepínač, je nutné vytvářet tyto položky postupně za sebou. V souboru resource.h si můžete zkontrolovat (po sestavení programu příkazem Rebuild All), zda čísla postupují za sebou a která položka je první. Při vzorovém příkladě byly položky vkládány postupně zespodu. Položky měly tyto hodnoty:
#define ID_VIEW_WITHTEXT                40004
#define ID_VIEW_16COLUMNS 40005
#define ID_VIEW_8COLUMNS 40006
#define ID_VIEW_4COLUMNS 40007
ID názvy položek si zapamatujte, odpovídají hodnotě parametru, který předává zpráva WM_COMMAND.
Máme-li připraveno, můžeme začít konečně "programovat". Do lokálních proměnných vložíme:
// Pro menu
HMENU hMenu;
Protože parametrem zprávy WM_COMMAND je ID vybrané položky menu, doplníme za zpracování IDM_FILE_EXIT ve zprávě WM_COMMAND nové příkazy nabídky:
   case ID_VIEW_WITHTEXT:
hMenu=CommandBar_GetMenu(hwndCB,0);
if (bSTextem)
{
bSTextem=FALSE;
CheckMenuItem(hMenu,ID_VIEW_WITHTEXT,MF_UNCHECKED);
}
else
{
bSTextem=TRUE;
CheckMenuItem(hMenu,ID_VIEW_WITHTEXT,MF_CHECKED);
};
InvalidateRect(hWnd,NULL,TRUE);
break;
case ID_VIEW_16COLUMNS:
hMenu=CommandBar_GetMenu(hwndCB,0);
nSloupce=16;
CheckMenuRadioItem(hMenu,ID_VIEW_16COLUMNS,
ID_VIEW_4COLUMNS,ID_VIEW_16COLUMNS,MF_BYCOMMAND);
PostMessage(hWnd,WM_APP,0,0);
InvalidateRect(hWnd,NULL,TRUE);
break;
case ID_VIEW_4COLUMNS:
hMenu=CommandBar_GetMenu(hwndCB,0);
nSloupce=4;
CheckMenuRadioItem(hMenu,ID_VIEW_16COLUMNS,
ID_VIEW_4COLUMNS,ID_VIEW_4COLUMNS,MF_BYCOMMAND);
PostMessage(hWnd,WM_APP,0,0);
InvalidateRect(hWnd,NULL,TRUE);
break;
case ID_VIEW_8COLUMNS:
hMenu=CommandBar_GetMenu(hwndCB,0);
nSloupce=8;
CheckMenuRadioItem(hMenu,ID_VIEW_16COLUMNS,
ID_VIEW_4COLUMNS,ID_VIEW_8COLUMNS,MF_BYCOMMAND);
PostMessage(hWnd,WM_APP,0,0);
InvalidateRect(hWnd,NULL,TRUE);
break;
Uvedený kód není příliš hezký, šlo by jej napsat lépe. Z důvodů přehlednosti to ale nechám v tomto stavu :-).
Změní-li se požadavek na zobrazení s textem či bez něj, upravíme kromě logické proměnné bSTextem i zaškrtnutí u položky v nabídce pomocí funkce CheckMenuItem. Při změně počtu zobrazovaných sloupců se nám také změnila velikost stránky pro posuvník. Změnu je ošetřena zasláním zprávy WM_APP svému oknu. Hodnoty WM_APP a výše jsou rezervovány pro obecné užití v programu a nekolidují s žádnou standardní zprávou posílanou systémem. Při jejím obdržení nastavíme velikost stánky zpracováním této zprávy:
   case WM_APP:
si.cbSize = sizeof(si);
si.fMask = SIF_PAGE;
si.nPage = (nLinek-1)*nSloupce;
SetScrollInfo (hwndScroll,SB_CTL,&si,TRUE);
break;
A protože chceme začít se zobrazováním 4 sloupců a použít přepínač zaškrtnutí položky, do zprávy WM_CREATE za vytvoření menu vložíme úvodní nastavení této položky:
   hMenu=CommandBar_GetMenu(hwndCB,0);
CheckMenuRadioItem(hMenu,ID_VIEW_16COLUMNS,
ID_VIEW_4COLUMNS,ID_VIEW_4COLUMNS,MF_BYCOMMAND);
V tomto okamžiku již můžeme prohlížet celý obsah bufferu s různým nastavením pohledů. Program se dostal do tohoto stavu:

obr. 28 Program v HPC Pro doplněný o nabídky způsobu zobrazení

Co bychom si měli z této lekce zapamatovat?

  • Pomocná data programu (jako je ikona) jsou uložena ve "zdrojích".
  • Pro zpracování zdrojů můžeme použít vestavěný vizuální nástroj.
  • ID vybrané položky z nabídky je parametrem zprávy WM_COMMAND.
  • Vlastnímu programu můžeme poslat zprávu. Pro vnitřní potřeby je k dispozici WM_APP.
  • Zaškrtnutí u položky v nabídce lze nastavit pomocí funkce CheckMenuItem.
  • Pro přepínač u několika položek v nabídce je připravena funkce CheckMenuRadioItem.
 

Buď první, kdo ohodnotí tento článek.

Nový komentář

Přihlásit se
  Ještě nemáte vlastní web? Můžete si jej zdarma založit na Blog.cz.