Aplikace ve Win32 API - úvod
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Aplikace ve Win32 API - úvodAplikace ve Win32 API - úvod

 

Aplikace ve Win32 API - úvod

Google       Google       26. 8. 2009       17 140×

Neměl by to být klasický výukový seriál, jehož primárním cílem je něco (dopodrobna teoreticky) vysvětlit. Nemyslím si, že bych dosáhl takové úrovně, abych mohl někoho učit. Tento seriál berte jako námět, jak se daná věc dá také dělat. A jeho výsledkem by měla být spíše tvorba "užitečného kódu", který se může hodit a lze ho dále (opakovaně) využít. Jednotlivé díly by tak měly obsahovat více programového kódu než psaného textu (snad bude první díl v tomto ojedinělou výjimkou).

O čem tento seriál vlastně bude?

Výsledkem seriálu by měla být "opravdová GUI aplikace" pro Windows, co dělá nějakou "užitečnou činnost". Začneme si vytvářet knihovnu znovupoužitelných tříd, pomocí kterých vytvoříme následně aplikaci, která demonstruje funkci a následně bude i nějakým způsobem užitečná. A pokud bude dostatek síly, času a zájmu, tak se dostane i na COM.

Předpokládám znalost jazyka C++, objektového programování (dále jen OOP) a Win32 API (dále jen API). O těchto tématech na serveru existují seriály. Projekty budou vytvářeny v MSVS 2008. Protože kód nebude nijak významně závislý na použitém IDE, tak by měl být po malých úpravách použitelný i jinde.

Nejprve si nastíníme problém. Chceme vytvořit GUI aplikaci pro Windows v C++. K tomu můžeme použít různé knihovny: MFC, ATL, VCL a mnoho dalších. Každá má svoje klady i zápory a diskuze na toto téma (která by byla plamenná asi tak stejně jako neplodná :)) by jistě neměla vítěze.

Nakonec všechny tyto knihovny ve větším či menším rozsahu využívají služeb API. Tak proč nepsat aplikace přímo s využitím jen API? Už jenom z principu musí být taková aplikace rychlejší, nezanáší se do ní další chyby (stačí ty v API a naše :)) atd. Důvody jsou vlastně pořád stejné a platí už od dob "přechodu" z assembleru na C.

Pro většinu je prvním důvodem čas strávený nad samotnou tvorbou aplikace. Trávit hodiny tvorbou GUI, reakce na události atd., když to v nějakém lepším IDE mohu mít za několik minut... Stále do kola programovat ty samé věci (např. smyčka zpráv). Druhým důvodem je složitost a obsáhlost API. Pokud nevíte, co chcete najít, tak to v MSDN budete hledat těžko nebo alespoň poměrně dlouho (což jsme zase u času a potažmo u peněz).

Tak jsem na úvod seriálu napsal dva důvody, proč by ani neměl vzniknout :), ale je to stejné jako u již zmiňovaného assembleru - pořád je pár bláznů, co na to "svoje" nedají dopustit (i když v případě assembleru to někdy ani jinak nejde). Takže vytrváme a vytvoříme aplikaci pouze s využitím API.

GUI aplikace pro Windows musí mít několik náležitostí (samozřejmě myšleno v C++ s využitím API):

  • vstupní bod aplikace (WinMain)
  • smyčku zpráv
  • funkci na zpracování příchozích zpráv (WindowProc)

Následně se "pouze" doprogramují menu, dialogy, reakce na zprávy, práce se soubory, samotný kód atd. Čím složitější a košatější je tvořená aplikace, tím je těchto maličkostí více a více.

Časem se ukáže, že některé části jsou pořád stejné nebo se opakují, a to nejenom v jednotlivých aplikacích, ale i v rámci jedné aplikace. Možná i to byl důvod, proč vznikla knihovna MFC, a je to také jeden z důvodů vzniku knihovny, která je námětem tohoto seriálu.

Půjdeme na to tedy od lesa a než se dostaneme k tvorbě nějaké aplikace, tak si knihovnu, která by nám usnadnila práci s API, vytvoříme. V tomto díle pouze založíme knihovnu, která bude exportovat vytvořené třídy. Začneme minimálním rozsahem. Knihovna bude zatím obsahovat pouze jednu třídu, od které budou všechny další přidávané dědit. Tato třída má název CMyObject.

Co budou mít všechny další třídy společného? Vzhledem k tomu, že není ani jasné, kolik jich bude a jaký bude rozsah, tak nemohou mít společného nic. To znamená, že třída obsahuje pouze konstruktor (neveřejný - instance této třídy nikdo vytvářet nebude) a destruktor. Dále může obsahovat diagnostické nástroje API - zatím si vystačíme s funkcí OutputDebugString, která je definována jako statická (což umožní použití i bez objektu).

Jedinou změnou proti klasické definici třídy je označení pro export z knihovny:

class __declspec(dllexport) CMyObject

Takto budou označeny všechny třídy, které do knihovny vložíme.

Aplikace z článku ke stažení.

Pokračování příště...

×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 se věnuje programování za peníze :)

Nové články

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ý