1 / 27

A WEL library

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.

patsy
Download Presentation

A WEL library

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

More Related