Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

A WEL library Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára.

Hasonló előadás


Az előadások a következő témára: "A WEL library Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára."— Előadás másolata:

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


Letölteni ppt "A WEL library Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára."