Upload
patsy
View
57
Download
0
Embed Size (px)
DESCRIPTION
A WEL library. Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára. Mi is a WEL?. Eiffel supercluster, amely a Windows API programozásához szükséges eszközöket tartalmazza. Csak azt, de azt teljes körűen. - PowerPoint PPT Presentation
Citation preview
A WEL library
Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára
Mi is a WEL?
Eiffel supercluster, amely a Windows API programozásához szükséges eszközöket tartalmazza.
Csak azt, de azt teljes körűen. Nem több mint egy burkoló osztálykönyvtár,
de minden API szolgáltatás eléréséhez eszközöket ad.
WEL supercluster szerkezete
10 darab cluster windows
Az ablaktípusokat megvalósító osztályok. gdi és gdistock
A rajzolást elősegítő osztályok. controls
A windows szabványos controljaihoz tartozó osztályok. stddlgs
A windows beépített dialógusablakaihoz tartozó osztályok. consts, messagess, shared, structs és support
egyéb winAPI szolgáltatást burkoló osztályok, segédosztályok, adatszerkezetek és konstansok.
WEL_APPLICATION
Ebből az osztályból származtatva készíthetünk WEL alkalmazást.
Ez egy absztrakt osztály. A származtatás során az új osztály törzsében meg
kell valósítanunk a main_window: WEL_COMPOSITE_WINDOW –t, amely az alkalmazásunk főablaka lesz.
Ezt a két lépést (a származtatást és a megvalósítást) az eiffel fejlesztői környezete automatikusan elvégzi helyettünk, ha WEL grafikus projectet kérünk.
A legegyszerűbb WEL alkalmazás(minimal_demo.e)class
MINIMAL_DEMOinherit
WEL_APPLICATIONrename
make as base_makeend
createmake
featuremake isdo
create main_window.make_top ("WEL minimal application")base_make
endend
A legegyszerűbb WEL alkalmazás(minimal_demo.ace)system
"minimal_demo"root
MINIMAL_DEMO: makeDefault --…cluster
root_cluster: "$ISE_EIFFEL\examples\wel\minimal"
all base: "$ISE_EIFFEL\library\base"exclude
"table_eiffel3"; "desc"; end
all wel: "$ISE_EIFFEL\library\wel"exclude
"spec"; "clib"; end
externalinclude_path:
"$(ISE_EIFFEL)\library\wel\spec\windows\include"object:
"$(ISE_EIFFEL)\library\wel\spec\$(ISE_C_COMPILER)\lib\wel.lib"end
Még egyszerűbben
classMINIMAL_DEMO
inheritWEL_APPLICATION
createmake
featuremain_window: WEL_FRAME_WINDOW is
oncecreate Result.make_top ("WEL Minimal
application")end
end -- class
windows cluster
Az ablaktípusokat tartalmazza. Definiálja a WEL_WINDOW osztályt, ami
minden megjeleníthető ablak ősosztálya.
Fontosabb ablaktípusok
WEL_FRAME_WINDOW A legáltalánosabban használt ablaktípus, általában ez alkotja egy
alkalmazás főablakát. A megszokott controlokon kívül tartalmazhat menüt és
státuszbárt is. WEL_MAIN_DIALOG
Dialógus alapú alkalmazások főablakának típusa WEL_MODAL_DIALOG
Modális dialógusablak; főablakból megnyíló ablakok létrehozására.
Létezik modeless változata amely nem modális dialógusablakot hoz létre.
WEL_CONTROL_WINDOW Saját controlok létrehozására alkalmas.
Két út a designhoz
1. Resources file Ablakok megtervezhetőek (Microsoft Developer
Studio vagy Borland Resource Workshop) vizuális tervezőeszközökkel.
A tervezőeszközök által generált .rc file-okból a ResourceBench és a h2e programok segítségével generálható az eiffel kód.
2. Eiffel kód Az ablak design-ját kialakító kódot teljes
mértékben kézzel írva alakítjuk ki a megjelenést.
Rajzolás a képernyőre
A szükséges osztályokat a gdi és a gdistock cluster tartalmazza.
Rajzolni lehet, bármely WEL_WINDOW vagy WEL_CONTROL leszármazottjára.
A rajzolás egy WEL_DC (vagy leszármazott) típusú objektumon keresztül lehetséges.
Rajzolás példa
featuredrawline (x1: INTEGER, y1: INTEGER, x2: INTEGER, y2: INTEGER) islocal
dc: WEL_CLIENT_DCdo
create dc.make (Current)dc.getdc.line (x1,y1,x2,y2)dc.relase
end
Problémák
Az előző példánál, átméretezéskor vagy ha a rajz elé kerül valami és eltakarja, majd pedig újra felűre kerül, akkor a kirajzolt vonal eltűnik.
Ennek oka, hogy az ablak automatikusan újrarajzolja magát ha szükséges.
Hogyan készíthetünk maradandó rajzot?
ON_PAINT
A hozzátartozó törzs az ablak, vagy control újrarajzolásakor automatikusan fut le.
„maradandó” rajzot hozhatunk létre a felüldefiniálásával.
Saját control létrehozásának egyik fontos momentuma. A megjelenést határozhatjuk itt meg.
Rajzolás példa 2.inherit
WEL_FRAME_WINDOWredefine
on_paint--…
end-- …feature
on_paint (paint_dc: WEL_PAINT_DC; invalid_rect: WEL_RECT) islocal
rect : WEL_RECT;brush : WEL_BRUSH;color : WEL_COLOR_REF;
docreate rect.make (10,10,50,50);create color.make_by_color (255);create brush.make_solid (color);paint_dc.fill_rect (rect,brush);
end
Színek, tollak, ecsetek
WEL_COLOR_REF Színeket reprezentál. Létrehozhatjuk RGB összetevőkből, vagy
használhatunk egy a Windowsban definiált színt a létrehozására. Az előre definiált színeket a WEL_COLOR_CONSTANTS, illetve a
WEL_STANDARD_COLORS osztályok tartalmazzák. WEL_PEN
Toll, a vonalak rajzolásához szükséges. Beállítható a színe, a vastagsága, és a stílusa (pontozott, stb.…)
A használható vonalstílusokat a WEL_PS_CONSTANTS, míg néhány előre definiált tollat a WEL_STANDARD_PENS osztály tartamaz.
WEL_BRUSH Ecset, amelynek beállíthatjuk a színét, mintázatát. Az ecsetet felhasználva rajzolhatunk kitöltött objektumokat. Előre definiált mintákat a WEL_HS_CONSTANTS osztályban találunk. A minta lehet akár tetszőleges WEL_BITMAP is.
Alakzatok
Rajzolhatunk üres alakzatokat, line, rectangle, round_rect, ellipse, pie, polygon,
poly_bezier, draw_text … Szöveg kirajzolása előtt a „dc” objektumunknak
megadhatunk egy WEL_FONT típusú objektumot, ami a betűtípust határozza meg.
és kitöltötteket. fill_rect, fill_region A fill_region egy WEL_REGION-t vár paraméterül,
ami lehet négyszög, polygon, vagy ellipszis.
Bitmap-ek kezelése
WEL_BITMAP osztály szolgál a kezelésükre. Létrehozhatunk egy ilyen típusú változót
Resources file beli név alapján Resources file beli ID alapján Egy üres bitmap-et WEL_DC segítségével
File-ból beolvasni egy kicsit komplikáltabb, kell hozzá: RAW_FILE WEL_DIB
Bitmap beolvasása file-ból (példa)Inherit--…
WEL_DIB_COLORS_CONSTANTSexport
{NONE} allend
--…feature
on_paint (paint_dc: WEL_PAINT_DC; invalid_rect: WEL_RECT) islocal
file : RAW_FILEdib: WEL_DIB bitmap : WEL_BITMAP
docreate file.make_open_read ("eximage.bmp")create dib.make_by_file (file)create bitmap.make_by_dib (paint_dc, dib, Dib_rgb_colors)paint_dc.draw_bitmap (bitmap, 0, 0,bitmap.width, bitmap.height)
end
Nyomtató kezelése
Egy WEL_PRINTER_DC –n keresztül nyomtathatunk.
Ilyet WEL_PRINT_DIALOG segítségével szerezhetünk.
A megszokott rajzoló műveletek értelmezettek erre a „dc” –re is.
Nyomtatás példalocal
print_dialog: WEL_PRINT_DIALOGprinter_dc: WEL_PRINTER_DC
docreate print_dialog.makeprint_dialog.activate (Current)if print_dialog.selected then
printer_dc := print_dialog.dcprinter_dc.start_document ("WEL Print Test")printer_dc.start_pageprinter_dc.line
(0,0,printer_dc.width,printer_dc.height)printer_dc.end_pageprinter_dc.end_document
endend
Vágólap kezelése A WEL_CLIPBOARD osztályból származtatva tudjuk kezelni a vágólapot.
inheritWEL_CLIPBOARD
export{NONE} all
end--…
GetClipboardText :STRING isdo
open_clipboard (current)retrieve_clipboard_textResult.make_from_string (last_string)
end
SetClipboardText(a_text:STRING) isdo
open_clipboard (current)set_clipboard_text (a_text)
end
Egérkurzor megváltoztatásainherit
WEL_IDC_CONSTANTSexport
{NONE} allend
featurecursor : WEL_CURSOR
featureon_left_button_down (keys: INTEGER; x_pos: INTEGER; y_pos: INTEGER) isdo
create cursor.make_by_predefined_id (Idc_wait)endon_set_cursor (hit_code: INTEGER) isdo
if cursor /= void thencursor.setdisable_default_processingend
end
WEL_MSG_BOX
A Windows API szabványos felugró ablakainak burkolóosztálya A message_box_result attribútum tartalmazza, hogy melyik
gombbal zártuk be az ablakot. WEL_ID_CONSTANTS osztályban vannak definiálva a
gombokhoz tartozó ID-k. A set_language parancsal beállíthatjuk az ablakon megjelenített
rögzített controlok szövegének a nyelvét. A nyelvkonstansokat a WEL_LANGUAGE_CONSTANTS tartalmazza.
A set_flag függvény a style paraméter és a WEL_MB_CONSTANTS osztály segítségével meghatározhatjuk, hogy mi kerüljön az ablakra.
Vannak előre definiált minták.
WEL_MSG_BOX 6 különböző előredefiniált minta:
basic_message_box normál megjelenés, OK gombbal. beállítható a stílusa, a stílusokat a WEL_MB_CONSTANTS
tartalmazza. error_message_box
hibaüzenetet jeleníthetünk meg vele, piros ikonnal, és egy OK gombbal
information_message_box információs üzenetet jelenít meg „buborékos i betű” ikonnal és OK
gombbal question_message_box
Eldöntendő kérdés megjelenítésére szolgál. Egy Yes és egy No gombbal. (angol nyelv esetén)
user_icon_message_box saját ikont helyezhetünk az ablakra
warning_message_box sárga felkiáltójeles ikont és egy OK gombot tartalmaz.
WEL_MSG_BOX (példa)
featureon_left_button_down
(keys: INTEGER; x_pos: INTEGER; y_pos: INTEGER) islocal
msg_box : WEL_MSG_BOXdo
create msg_box.makemsg_box.question_message_box(current,"text", "title")if msg_box.message_box_result = IdYes then
minimizeend
end
Registry kezeléseinherit
WEL_REGISTRYexport
{NONE} allend
--…local
key: WEL_REGISTRY_KEYp: POINTERvalue: WEL_REGISTRY_KEY_VALUE
dokey := enumerate_key(hkey_current_config,0)set_text(key.name)p:=create_key (hkey_current_config, "my key",0)p:=open_key (hkey_current_config,"my key",2)create value.make (1, "alma")set_key_value (p,"my value",value)
end