Win32 API - 1. díl
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Win32 API - 1. dílWin32 API - 1. díl

 

Win32 API - 1. díl

Google       Google       14. 1. 2006       45 840×

Tak vás vítám u 1. dílu o Win32 API. Dnes si povíme něco teorie o základu vytváření nejjednodušší aplikace ve Windows. Tu si vytvoříme a podrobně popíšeme. Porovnáme rozdíly od textového režimu a také se seznámíme se zprávou MessageBox :-)
..

Po minulém teoretickém úvodním díle se konečně ponoříme trochu do kódu, ukážeme si, jak vytvořit úplně nejjednodušší aplikaci ve Win32 API a taky si ukážeme, jak vytvořit hlavní okno aplikace. Samozřejmě si to vše pořádně a podrobně popíšeme a vysvětlíme.
Tak hurá do toho :-)

Hned ze začátku bych chtěl zavést malé zjednodušení: psát neustále Win32 API je trochu unavující, tudíž budu používat zkrácený zápis "API". Napíšu-li tedy "API", mám na mysli "Win32 API", pokud bych někdy mluvil o jiném API, včas na to upozorním.

Tak a teď už honem do toho :-)

Ještě než úplně začneme, řekneme si, jak vytvářet projekt. Vytváří se stejně jako pro textový režim. Chtěl bych znovu připomenout, že používám Dev-C++.
Tedy: Soubor ->Nový ->Projekt... Zde si označíme Empty project, zadáme jméno projektu a klepneme na OK. Poté už jen přidáme nový cpp source file a můžeme psát.

Jak to bylo

Jistě si pamatujete na základní konstrukci programu ve znakovém režimu. Připomeňme si:

Pro C:
#include <stdio.h>
int main()
{
    printf("Ahoj svete
");
    return 0;
}
Nebo pro C++:
#include <iostream>
int main()
{
     std::cout << "Ahoj svete
";
     return 0;
}

A nyní

Ve Windows je to hodně podobné:
#include <windows.h>
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
                                PSTR szCmdLine, int iCmdShow)
{
     MessageBox(NULL, TEXT("Ahoj světe"), TEXT("Programujeme"),0);
     return 0;
}

A toto je vlastně ta naše slibovaná nejjednodušší aplikace v API. Zkuste si tento kód vepsat do projektu a zkompilovat. Měla by se vám zobrazit zpráva s textem a tlačítkem OK.

No není to úžasný? :-)

Tato windows verze programu „Ahoj světe“ se skládá z úplně stejných částí jako verze textová. Má příkaz include, vstupní bod programu, volání funkce, ale i příkaz return.


Teď si tento kód popíšeme a porovnáme s verzí pro textový režim.

Hlavičkový soubor "stdio.h/iostream" byl nahrazen souborem "windows.h". Výchozí místo programu "main" bylo změněno na "WinMain" a místo "printf/cout" jsme nahradily funkcí "MessageBox" z Windows API. Ve skutečnosti jsou v tomto kódu ještě další dvě nové funkce a několik identifikátorů psaných velkými písmeny.
Podívejme se na to zblízka.

Hlavičkový soubor "windows.h" je hlavní vkládaný soubor, který obsahuje ostatní windows hlavičkové soubory. Některé z nich obsahují další hlavičkové soubory. Nejdůležitější z nich jsou tyto:

windef.f /definice základních typů
winnt.h /definice typů pro podporu kódování UNICODE
winbase.h /funkce jádra (kernel)
winuser.h /funkce uživatelského rozhranní
wingdi.h /funkce pro zařízení grafického rozhranní

Tyto hlavičkové soubory definují všechny datové typy pro Windows, volání funkcí, datové struktury a identifikátory konstant. Zkuste se do nich třeba někdy podívat, hodně z nich člověk pochytí :-)

Tak jako je pro textový režim výchozí bod programu main, je jím pro Windows WinMain, který má obvykle takovýto tvar:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine,
                                     int iCmdShow)

Je definován v souboru „winbase.h“.

Funkce WinMain je deklarována tak, aby vracela hodnotu typu int. Identifikátor WINAPI je definován v hlavičkovém souboru „windef.h“ příkazem:

#define WINAPI __stdcall

Tento zápis určuje volací konvenci, která určuje, jak bude generován strojový kód pro uložení argumentů funkce na zásobník v okamžiku volání funkce. Většina volání funkcí Windows je právě deklarována jako WINAPI.

První parametr funkce WinMain se nazývá "handle instance". Z pohledu programátora je handle číslo, které aplikace používá pro identifikaci všeho. V tomto případě označuje program. Je třeba ho zadávat jako parametr při volání některých funkcí Windows.

Ve starších verzích Windows se mohlo stát, že při opakovaném spuštění stejného programu se vytvořila vícenásobná instance programu. Všechny instance pak sdílely kód a paměť určenou jen pro čtení (obvykle zdroje, nabídky a šablony dialogů). Program mohl rozhodnout, zda běží další instance programu otestováním druhého parametru "hPrevInstance". Potom může přeskočit některé kroky a některá data přesunout z předchozí instance do své datové oblasti.

Ve 32bitových Windows se od tohoto upustilo.
Druhý parametr funkce WinMain je vždy "NULL" (definován jako 0). Je zde zachován jen kvůli zpětné kompatibilitě. My ho budeme mít vždy NULL.

Třetím parametrem je příkazový řádek používaný pro spuštění programu. Některé aplikace Windows používají tento parametr např. pro nahrání souboru do paměti během startu programu.

Čtvrtý parametr určuje, jak bude program poprvé zobrazen – buď normálně nebo maximalizovaný, aby vyplnil celé okno, nebo minimalizovaný pro zobrazení na hlavním panelu. Někdy později si povíme, jak s tímto parametrem pracovat.

Funkce MessageBox

Funkce MessageBox je určena k zobrazování krátké textové zprávy. První parametr je obvykle handle okna, pro které se zpráva zobrazuje. My jsme použili NULL, poněvadž jsme ještě žádné okno nevytvořili. Druhý parametr je textový řetězec, který se objeví uvnitř okna. Třetí parametr je text, který se má zobrazit v záhlaví dialogu zprávy.

Řetězce jsme uzavřeli do makra "TEXT".
Normálně se nemusí všechny řetězce uzavírat do makra "TEXT", ale pro budoucí převod programu do znakové sady UNICODE je to dobrý zvyk a předpokládám, že dnes již asi každý používá NT verze Windows, tak bude dobré tuto podobu používat vždy. Někdy si o znakových sadách řekneme více.

Čtvrtý parametr může být kombinace konstant začínající předponou MB_, které jsou definovány v hlavičkovém souboru "winuser.h". Když bude čtvrtý parametr nastaven na 0, bude se zobrazovat standartně jen tlačítko OK. Koukněte se do souboru „winuser.h“ a prohlédněte si konstanty. Dají se spojovat, takže pokud chcete zobrazit tlačítko/a a k tomu nějakou ikonu, stačí konstanty spojit znakem "+". Takže chcete-li použít zprávu s tlačítky "Ano" a "Ne" a ikonou "I" informace, napíšete čtvrtý parametr takto:

MB_YESNO+MB_ICONINFORMATION

Zkuste.

Funkce MessageBox v našem programu vrací 1, ale správně spíš vrací „ID_OK“. I to je uvedeno v souboru „winuser.h“, kde je konstantě „ID_OK“ přiděleno číslo 1.

Pro dnešek by to na ukázku stačilo a v příštím díle si již vytvoříme hlavní okno aplikace.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
Autor programuje v jazycích C++ a Delphi, mezi další koníčky patří kvantová fyzika.

Nové články

Obrázek ke článku Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý