C++ & C# Programming page
 

 

# Úvod
# Tvůrci
# C++
# C#
# Linky





Mini-seriál o grafice - 6. díl

Už je to tady! Poprvé se odvážíme sobecky si přivlastnit celou obrazovku pomocí DirectDraw! :)

Abych se nedostal hned do složitostí, myslím, že postačí aspon "přepnutí do fullscreen". Sama o sobě to není špatná funkce, pokud máte zájem o exkluzivní umístění programu na obrazovce, je tedy možné použít i DirectDraw.
Ale raději se už pustíme do práce...

Link, Include
DirectDraw potřebuje teoreticky jen 2 manipulace s externími zdroji - hlavička a knihovna.

#pragma comment(lib, "ddraw.lib") // 1.
#pragma comment(lib, "dxguid.lib")
#include <ddraw.h> // 2.
#define INITGUID

ddraw knihovna a hlavičkový soubor jsou základní objekty, které je nutno přilinkovat. Další jsou GUID, které rozšiřují funkce atd.

Inicializace
Na samém počátku je nutné vytvořit DirectDraw zařízení. No a aby se nevytvářelo jen tak do větru, uchová se odkaz na něj v proměnné.

LPDIRECTDRAW7 lpDD = NULL;

void InitDD ( HWND hWnd )
{
     DirectDrawCreateEx( NULL, (LPVOID*)&lpDD, IID_IDirectDraw7, NULL);
...

1. vstupní údaj funkce je identifikátor grafického zařízení. Pokud zadáte NULL, systém vybere sám. Navíc je možné zadat tyto možnosti:
     DDCREATE_EMULATIONONLY – využívá se softwarová emulace, není podporováno žádné hardwarové urychlování. 
     DDCREATE_HARDWAREONLY – využívá se hardwarové urychlování grafické karty, pokud karta nepodporuje dané prvky, funkce vrací DDERR_UNSUPPORTED

2. parametr je odkaz na proměnnou, která má později obdržet informace o zařízení.

3. vstupní hodnota je nastavení rozhraní COM, musí být IID_IDirectDraw7

4. a poslední parametr má využití u COM, bohužel když se zadá jiná hodnota než NULL, dojde k chybě. Pravděpodobně jde o funkci, se kterou se počítá do budoucna. Na tuto "předvídavost" autorů ještě párkrát narazíme...

Nastavení režimu
Po vytvoření zařízení musíme nastavit jeho vlastnosti a specifikovat chování. To zařizuje funkce SetCooperativeLevel.

...
     lpDD->SetCooperativeLevel(hWnd, DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT);
...

Flagy nastavují již zmíněné vlastnosti. Zde je vysvětlení použitých flagů:
     DDSCL_EXCLUSIVE – zajistí, že aplikace má výhradní právo. Narůstá díky tomu rychlost a efektivnost běhu programu. Tento příznak musí být použit s DDSCL_FULLSCREEN 
     DDSCL_FULLSCREEN – indikuje, že aplikace bude fullscreen - celoobrazovková. Musí být použit s DDSCL_EXCLUSIVE. 
     DDSCL_ALLOWREBOOT – povoluje klávesovou zkratku Ctrl + Alt + Delete při výhradním režimu. Můžete tedy z aplikace vyskočit přes Správce úloh. To je důležité, když nevíte jestli vám aplikace náhodou neshodí Windows. (Což se při neopatrnosti a zapomínání stává často :)

Mód zobrazení
Poslední příkaz, který uvedu, nastavuje rozlišení obrazovky, obnovovací frekvenci, počet barev.

...
     lpDD->SetDisplayMode(640,480, 32, 0, 0);
}

V tomto případě se obrazovka přepne do režimu 640 x 480 / 32. Obnovovací frekvence se detekuje sama. Poslední 0 jsou flagy pro další vlastnosti.

Aplikace
Použití kódu je snadné. Vložíte ho do hlavičkového souboru programu, který pro vás vytvoří Wizard Visual Studia. Funkci InitDD pak jednoduše zavoláte po vytvoření a zobrazení okna, předáte jí hWnd parametr a woala, okno by se mělo(!) přepnout do fullscreen.

V dalším pokračování bych se pokusil o "slide-show", kde by se střídala série obrázků, zobrazovaných via DirectDraw.



Správce sekce: Dejvino



14.2 2005

C++: pridano par odkazu na clanky o OpenGL, IRC, POP3 a BMP
14.8 2004

C++: přidán klient pro Internet Relay Chat (IRC)
11.7 2004

C++: opravil jsem zdrojak WebServeru, byla tam navic jedna funkce kterou jsem nepridal a mnoho zacatecniku by si s tim nemuselo vedet rady...
27.6 2004

Vytvořen IRC kanál #c-prog na serveru Quakenet
10.6 2004

C++: přidán program WebServer, stojí za prohlédnutí!
5.6 2004

C++: přidán článek o CheckBoxu
29.5 2004

C++: přidán program WinSock Mail
28.5 2004

C#: přidán program DNStoIP
Vaše IP je 54.92.170.142
Stránka byla načtena za 0.02614 sekund.