Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaSzebasztián Varga Megváltozta több, mint 10 éve
1
A WEL library Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára
2
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.
3
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.
4
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.
5
A legegyszerűbb WEL alkalmazás (minimal_demo.e) class MINIMAL_DEMO inherit WEL_APPLICATION rename make as base_make end create make feature make is do create main_window.make_top ("WEL minimal application") base_make end
6
A legegyszerűbb WEL alkalmazás (minimal_demo.ace) system "minimal_demo" root MINIMAL_DEMO: make Default --… 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 external include_path: "$(ISE_EIFFEL)\library\wel\spec\windows\include" object: "$(ISE_EIFFEL)\library\wel\spec\$(ISE_C_COMPILER)\lib\wel.lib" end
7
Még egyszerűbben class MINIMAL_DEMO inherit WEL_APPLICATION create make feature main_window: WEL_FRAME_WINDOW is once create Result.make_top ("WEL Minimal application") end end -- class
8
windows cluster Az ablaktípusokat tartalmazza. Definiálja a WEL_WINDOW osztályt, ami minden megjeleníthető ablak ősosztálya.
9
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.
10
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.
11
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.
12
Rajzolás példa feature drawline (x1: INTEGER, y1: INTEGER, x2: INTEGER, y2: INTEGER) is local dc: WEL_CLIENT_DC do create dc.make (Current) dc.get dc.line (x1,y1,x2,y2) dc.relase end
13
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?
14
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.
15
Rajzolás példa 2. inherit WEL_FRAME_WINDOW redefine on_paint --… end -- … feature on_paint (paint_dc: WEL_PAINT_DC; invalid_rect: WEL_RECT) is local rect : WEL_RECT; brush : WEL_BRUSH; color : WEL_COLOR_REF; do create rect.make (10,10,50,50); create color.make_by_color (255); create brush.make_solid (color); paint_dc.fill_rect (rect,brush); end
16
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.
17
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.
18
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
19
Bitmap beolvasása file-ból (példa) Inherit --… WEL_DIB_COLORS_CONSTANTS export {NONE} all end --… feature on_paint (paint_dc: WEL_PAINT_DC; invalid_rect: WEL_RECT) is local file : RAW_FILE dib: WEL_DIB bitmap : WEL_BITMAP do create 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
20
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.
21
Nyomtatás példa local print_dialog: WEL_PRINT_DIALOG printer_dc: WEL_PRINTER_DC do create print_dialog.make print_dialog.activate (Current) if print_dialog.selected then printer_dc := print_dialog.dc printer_dc.start_document ("WEL Print Test") printer_dc.start_page printer_dc.line (0,0,printer_dc.width,printer_dc.height) printer_dc.end_page printer_dc.end_document end
22
Vágólap kezelése A WEL_CLIPBOARD osztályból származtatva tudjuk kezelni a vágólapot. inherit WEL_CLIPBOARD export {NONE} all end --… GetClipboardText :STRING is do open_clipboard (current) retrieve_clipboard_text Result.make_from_string (last_string) end SetClipboardText(a_text:STRING) is do open_clipboard (current) set_clipboard_text (a_text) end
23
Egérkurzor megváltoztatása inherit WEL_IDC_CONSTANTS export {NONE} all end feature cursor : WEL_CURSOR feature on_left_button_down (keys: INTEGER; x_pos: INTEGER; y_pos: INTEGER) is do create cursor.make_by_predefined_id (Idc_wait) end on_set_cursor (hit_code: INTEGER) is do if cursor /= void then cursor.set disable_default_processing end
24
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.
25
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.
26
WEL_MSG_BOX (példa) feature on_left_button_down (keys: INTEGER; x_pos: INTEGER; y_pos: INTEGER) is local msg_box : WEL_MSG_BOX do create msg_box.make msg_box.question_message_box(current,"text", "title") if msg_box.message_box_result = IdYes then minimize end
27
Registry kezelése inherit WEL_REGISTRY export {NONE} all end --… local key: WEL_REGISTRY_KEY p: POINTER value: WEL_REGISTRY_KEY_VALUE do key := 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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.