Spořič obrazovky II. - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



C/C++

Spořič obrazovky II.

15. března 2001, 00.00 | Dokončení článku o tvorbě spořiče obrazovky v C++ Builderu. Po přečtení toho článku zjistíte, že tvorba spořiče je opravdu hračka.

V článku "Spořič obrazovky ve Windows" jsme si ukázali, jak vytvořit kostru spořiče obrazovky pro Windows. V tomto pokračování si doplníme kód spořiče o funkčnost zobrazování "náhledu" v okně dialogu nastavení vlastností obrazovky. V případě parametru /p (resp. -p nebo p) je obvykle dalším parametrem handle příslušného okna v tomto dialogu (malý monitor), jak je vidět na obrázku, kde již vidíte výsledek, který dostaneme při vybrání spořiče (jehož celý kód si můžete stáhnout na konci článku).

Tento handle je ve formě dekadického celého čísla, použijeme tedy funkci

 int atoi(const char* string);

V projektu je formulář FPreview, který vytvoříme jako dětské okno výše zmíněného okna. Jak na to? Stačí, abychom znali tento handle v okamžiku provádění funkce formuláře CreateParams, která pak může vypadat třeba takto (m_Parent je členská proměnná třídy formuláře a v ní uložen právě požadovaný handle rodičovského okna): 

void __fastcall TFPreview::CreateParams(Controls::TCreateParams &Params)
{
 RECT rect;
 TForm::CreateParams(Params);
 Params.WndParent = m_Parent;
 if ( m_Parent != NULL )
 {
  Params.Style = WS_VISIBLE | WS_CHILD;
  GetWindowRect(m_Parent, &rect);
  Params.X = 0;
  Params.Y = 0;
  Params.Width = rect.right - rect.left;
  Params.Height = rect.bottom - rect.top;
 }
}

Dále jsem takto vytvořil členskou funkci formulaře ShowPreview, kterou budeme volat, jakmile budeme znát hodnotu diskutovaného rodičovského okna "preview".

void __fastcall TFPreview::ShowPreview(HWND parent)
{
 m_Parent = parent;
 RecreateWnd();
 ShowModal();
}

Poté, co třída formuláře získá handle na rodičovské okno, zavoláme funkci RecreateWindow. Tato funkce zruší a znovu vytvoří okno formuláře, což v našem případě znamená, že je opět provedena upravená členská funkce CreateParams, kde již budeme mít platný handle na rodičovské okno. Takto vytvořený formulář pak modálně zobrazíme.

Tuto funkci budeme volat po vytvoření instance formuláře poté, co zjistíme (z parametrů příkazového řádku) handle na požadované rodičovské okno, jak je vidět v části kódu funkce WinMain:

...
case smPreview:
 if ( hwnd == NULL ) break;
 FPreview = new TFPreview(NULL);
 FPreview->ShowPreview(hwnd);
 break;
...

Ještě poznámku k instalaci spořiče, o které jsem se zmínil již v minulém článku. V uvedeném příkladu ke stažení je nastavena volba linkování s dynamickými balíčky i RTL knihovnou. Pokud chcete, aby program bylo možno spustit i na počítači, kde není nainstalován C++ Builder, popř. tyto runtimové balíčky, musíte změnit tyto volby tak, aby se všechny tyto knihovny přilinkovaly do kódu staticky (nebo samozřejmě tyto knihovny na počítač správně nainstalovat). Výsledný soubor musí mít příponu scr, což můžete nastavit přímo ve volbách aplikace (Project Options - záložka Application - Target file extension) nebo ji změnit po vytvoření souboru. Tento soubor pak překopírujte do složky "system32" adresáře Windows (obvykle WINNT), resp. system u Windows 98 (jestli se nepletu - já používám Windows 2000). V každém případě je to ta složka, ve které najdete ostatní nainstalované spořiče.

 Screen saver

Tématické zařazení:

 » Rubriky  » C/C++  

 » Rubriky  » Software  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: