Kurz1 - Kapitola13

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

3.7 Změna názvu okna a doplnění ikony

Program je nyní již funkční, v tomto dílu v něm provedeme pouze drobné kosmetické úpravy. Většina programů, které zpracovávají nějaké soubory, umožňují uživateli, aby měl neustále přehled s jakým souborem má tu čest. Obvykle se to provádí doplněním jména souboru do titulkového pruhu programového okna (viz např. Poznámkový blok, MS Word, IE apod.).
V kapesních počítačích jsou okna graficky upravena trochu jinak, přesto i zde můžeme podobnou funkci realizovat. Doplníme nejprve do názvu okna i jméno otevřeného souboru.
Protože budeme pracovat s řetězci, je vhodné použít hlavičkový soubor pro práci s nimi. Na úvod souboru HexaView.cpp vložíme hlavičku:
#include <string.h>
Také bude potřeba přichystat nějaké proměnné. Pro předpokládaný úkol budou stačit tři lokální proměnné ve funkci WndProc:
// Pro doplneni jmena a ikony
HICON hIcon;
LPTSTR pPom;
TCHAR szAplJmeno[MAX_LOADSTRING];
Do zpracování zprávy pro otevření souboru vložte za InvalidateRect;
   // Toto je doplnek pro doplneni textu do nazvu programu
LoadString(hInst,IDS_APP_TITLE,szAplJmeno,MAX_LOADSTRING);
lstrcat(szAplJmeno,TEXT("["));
pPom=szFileName;
pPom+=of.nFileOffset;
if (wcslen(pPom) < 12)
{
lstrcat(szAplJmeno,pPom);
lstrcat(szAplJmeno,TEXT("]"));
}
else
{
wcsncat(szAplJmeno,pPom,9);
lstrcat(szAplJmeno,TEXT("...]"));
}
SetWindowText(hWnd, szAplJmeno);
// ***************************************
Nejprve si do proměnné szAplJmeno vložíme funkcí LoadString ze zdrojů jméno aplikace, které nám tam do řetězce připravil AppWizard. Ke jménu připojíme levou závorku. Ukazatel pPom nastavíme na jméno souboru (odstraníme úvodní názvy složek). Podle délky jména souboru pak připojíme celé jméno, nebo pouze jeho část doplněnou o tři tečky. Obojí je samozřejmě zakončeno pravou závorkou.
Programové okno je možné ještě doplnit příslušnou ikonou tak, jak je to běžné ve "velkých Windows".
Na úvod zpracování zobrazení ikony můžeme opravit drobnou chybu, kterou nám ve zdrojovém kódu připravil AppWizard. Položka wc.hIcon ve funkci MyRegisterClass by měla být nastavena na NULL. Informaci, kterou připravil AppWizard Windows CE nepodporují.
Pro zobrazení ikony máme již připravenou lokální proměnnou hIcon. Protože ikona bude stejná po celou dobu činnosti programu, stačí, když ji zobrazíme při zpracování zprávy WM_CREATE. Např. za vytvoření nabídkového pruhu (Menu) můžeme doplnit následující zdrojový kód:
   // Doplnime Ikonu oknu
hIcon=(HICON)SendMessage(hWnd,WM_GETICON,FALSE,0);
if (hIcon == 0)
{
hIcon=(HICON)LoadImage(hInst,MAKEINTRESOURCE(IDI_HEXAVIEW),
IMAGE_ICON,16,16,0);
SendMessage (hWnd,WM_SETICON,FALSE,(LPARAM)hIcon);
}
Pro počítače bez klávesnice nebude mít uvedená ikona valný význam. V titulku okna programu Pocket PC se objeví pouze doplněný text. Na obrazovce počítače HPC by však mělo být tlačítko v "Hlavním panelu" vypadající podobně jako např. ve Windows98.

obr. 30 Tlačítko programu v "Hlavním panelu" počítačů HPC
Z obrázku je patrné, že se použila malá verze ikony, kterou jsme upravili v díle zabývajícím se zdroji.

3.7.1 Úprava pro Windows CE 2.0

Poznamenejme pouze, že na přístroji s WinCE 2.0 se nezobrazovalo korektně jméno otevřeného souboru. Jméno zůstalo zachováno včetně celé adresářové cesty (položka of.nFileOffset pravděpodobně vrací hodnotu 0). Ofset jména v rámci cesty (řádek pPom+=of.nFileOffset;) by tady bylo asi vhodné nahradit vlastním postupem. Jako např.:
   while (*pPom) pPom++;   // najdu konec jmena
while ((*pPom != '\\') && (pPom > szFileName)) pPom--; // vratim se k '\'
if (pPom != szFileName) pPom++;

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

  • Změnit název okna lze funkcí SetWindowText.
  • Ikonu oknu neurčí funkce RegisterClass, je nutno poslat oknu zprávu WM_SETICON.
 

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.