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

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

 

Aplikace ve Win32 API - úvod

Google       Google       26. 8. 2009       13 163×

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

Reklama
Reklama

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

Reklama
Reklama
Obrázek ke článku ICT PRO školení zaměřené nejenom na ICT

ICT PRO školení zaměřené nejenom na ICT

Dovolte, abychom se představili. Jsme zaměstnanci společnosti ICT Pro, profesionálové v oblasti poskytování komplexních ICT služeb. Neboli služeb spojených s informačními a komunikačními technologiemi, které dnes - ve 21. století - tvoří  nedílnou součást běžného provozu všech moderních firem.

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ý