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

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

 

Win32 API - 1. díl

Google       Google       14. 1. 2006       40 147×

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 :-)
..

Reklama
Reklama

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 Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Delphi 10.1.2 (Berlin Update 2) – na co se můžeme těšit

Touto roční dobou, kdy je zem pokrytá barevným listím a prsty křehnou v mrazivých ránech, se obvykle těšíme na zbrusu novou verzi RAD Studia. Letos si však ale budeme muset počkat na Godzillu a Linux až do jara. Vezměme tedy za vděk alespoň updatem 2 a jelikož dle vyjádření pánů z Embarcadero se budou nové věci objevovat průběžně, pojďme se na to tedy podívat.

Reklama
Reklama
Obrázek ke článku Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Konference: Moderní datová centra pro byznys dneška se koná už 24. 11.

Stále rostoucí zájem o cloudové služby i maximální důraz na pružnost, spolehlivost a bezpečnost IT vedou k výrazným inovacím v datových centrech. V infrastruktuře datových center hraje stále významnější roli software a stále častěji se lze setkat s hybridními přístupy k jejich budování i provozu.

Obrázek ke článku Konference: Mobilní technologie mají velký potenciál pro byznys

Konference: Mobilní technologie mají velký potenciál pro byznys

Firmy by se podle analytiků společnosti Gartner měly  rychle přizpůsobit skutečnosti, že mobilní technologie už zdaleka nejsou horkou novinkou, ale standardní součástí byznysu. I přesto - nebo možná právě proto - tu nabízejí velký potenciál. Kde tedy jsou ty největší příležitosti? I tomu se bude věnovat již čtvrtý ročník úspěšné konference Mobilní řešení pro business.

Obrázek ke článku Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres přiveze v září do Prahy špičky světové kryptoanarchie

Hackerský kongres HCPP16 pořádá od 30. září do 2. října nezisková organizace Paralelní Polis již potřetí, a to ve stejnojmenném bitcoinovém prostoru v pražských Holešovicích. Letos přiveze na třídenní konferenci přes 40 většinou zahraničních speakerů – lídrů z oblastí technologií, decentralizované ekonomiky, politických umění a aktivismu. Náměty jejich přednášek budou také hacking, kryptoměny, věda, svoboda nebo kryptoanarchie.

loadingtransparent (function() { var po = document.createElement('script'); po.type = 'text/javascript'; po.async = true; po.src = 'https://apis.google.com/js/plusone.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(po, s); })();
Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý