wxWindows (ma wxWidgets)

Bevezető

Ha a wxWindows objektumainak használatával fejlesztjük C++-os programunkat,

akkor programunk kis munkával lefordítható más operációs rendszerek alá is,

például *BSD, Linux, MacOS alá. Nagyon sok feladathoz kész objektumok

állnak rendelkezésre. Az alap dolgok, mint mindenféle menük és ablakok

kezelése, események kezelése. Ezeken kívül különféle adatok alapobjektumai

léteznek, mint a PERL-éhez hasonló hash-ek (wxHashMap) és alap tömb

objektumok (wxArray), melyek rendezhetők és keresni lehet bennük.

Bár wxWindows egy régebbi lefordított változata letölthető DevC++-hez,

de a jelenlegi stabil verzió a 2.4.2-est magunknak kell lefordítani

és telepíteni (Debian Linux alatt vannak előre elkészített csomagok).

Telepítés


Most lássuk a telepítés menetét. Töltsük le a

http://www.wxwindows.org honlapról

a wxWindows stabil változatát (jelenleg 2.4.2). Telepítsük fel ill.

csomagoljuk ki (a DevC++-hoz készült Template úgy van megírva, hogy

a DevC++ a c:dev-cpp, a wxWindows a c:dev-cppwxwindows-2.4.2

könyvtárba van telepítve). Töltsük le a

fil41b.zip -et és másoljuk fel úgy a

Dev-C++ könyvtárba, hogy az exe-k a bin/ könyvtárba kerüljenek. Érdemes

még a gtxt040b.zip -et is letölteni

(Debian alatt gettext-base és gettext csomagok),

ha használni akarjuk a gettext-et a programunk más nyelvekre lefordítani.

Állítsuk be a DevC++ bin könyvtárát a PATH listába.

Indítsunk egy parancssort és menjünk a wxWindows-2.4.2

könyvtárba, onnan az src/msw könyvtárba. Ha kiadjuk a

make -f makefile.g95 WXMAKINGDLL=1 parancsot, jó sokáig

fordítja a wxWindows könyvtárt és a végén egy libwxmsw242d.a és egy

wxmsw242d.dll fájl keletkezik. Ezeket a fejlesztés közben használhatjuk.

Jó nagy méretű a dll, kb. 30 mega. Tele van a nyomkövetéshez kapcsolódó

információkkal. Továbbá a lib/mswdlld/wx/ könyvtárba kerül egy setup.h,

ami a lib-hez tartozó adatokat tartalmazza. A végleges (nyomkövetési

információkat nem tartalmazó) könyvtár lefordítása a

make -f makefile.g95 WXMAKINGDLL=1 FINAL=1 paranccsal

lehetséges. Így egy libwxmsw242.a, egy wxmsw242.dll és a lib/mswdll/wx/

könyvtárban még egy setup.h keletkezik. A WXMAKINGDLL=1 paraméter

lespórolásával az exe-be fordítható lib keletkezik, de ez szerintem

nem jó, mert minden fordításnál sokkal tovább tart a linkelés. A

wxmsw242.dll és a végleges exe is a strip paranccsal

kisebbíthető. Levágja a megmaradt nyomkövetési információt. Utána az

UPX nevű programmal

(http://upx.sf.net)

a DLL-t és az EXE-t is tovább tömöríthetjük. Ugyanitt természetesen a

Linux verzió is letölthető ill. a forrás.

wxWindows program lefordítása


Ha eddig eljutottunk van két dll-ünk két lib-ünk és két .h fájlunk.

Attól függően, hogy melyik library-t akarjuk használni (a debug verziót

vagy a véglegest), kell mást megadni a linkernek: -lwxmsw242d vagy

-lwxmsw232 és fordítónak: -Ic:/wxwindows-2.4.2/lib/mswdlld vagy

-Ic:/wxwindows-2.4.2/lib/mswdll. A /wx könyvtár szándékosan nincs megadva,

ezt mindig a .c és .cpp fájlokban adjuk meg:

#include

A wxWindows könyvtárban a samples könyvtárban számos példát találunk.

Ezeket a make -f makefile.g95 WXUSINGDLL=1 paranccsal

fordíthatjuk le.

DevC++-hoz letölthető template itt: ezt én gyártottam

devcpp_wxwin_template.zip.

Másoljuk be a Dev-Cpp/Template könyvtárba a fájlokat. Az általam

készített template használ egy származtatott log ablak objektumot. Másold

a két fájlt a projektkönyvtáradba. Letölthető itt:

mylogwin.zip

Alapból a template-em végleges verziót fordít. A Projekt beállításoknál

a C++ fordítónak kell beállítani a következő opciókat:

-D__WXDEBUG__ -g. A linkernél pedig a -lwxmsw242

opciót kell átírni -lwxmsw242d-re. Ekkor látszódni fog

a saját log ablak is, egyébként nem fordul bele a programba.

A template-em megpróbálja a m_locale.Init függvényhívással megpróbálja

beállítani a magyar sajátosságokat. Bár a wxWindows 2.4.2-ben megvan

az üzenetek magyar fordítása, van benne egy-két hiba. Az általam

kijavított szövegek javítása letölthető itt:

wxhu.zip. A végleges programhoz elég a

wxstd.mo fájlt mellékelni.

Oldalak