A WEL library
description
Transcript of A WEL library
![Page 1: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/1.jpg)
A WEL library
Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára
![Page 2: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/2.jpg)
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.
![Page 3: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/3.jpg)
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.
![Page 4: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/4.jpg)
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.
![Page 5: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/5.jpg)
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
![Page 6: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/6.jpg)
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
![Page 7: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/7.jpg)
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
![Page 8: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/8.jpg)
windows cluster
Az ablaktípusokat tartalmazza. Definiálja a WEL_WINDOW osztályt, ami
minden megjeleníthető ablak ősosztálya.
![Page 9: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/9.jpg)
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.
![Page 10: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/10.jpg)
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.
![Page 11: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/11.jpg)
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.
![Page 12: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/12.jpg)
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
![Page 13: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/13.jpg)
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?
![Page 14: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/14.jpg)
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.
![Page 15: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/15.jpg)
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
![Page 16: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/16.jpg)
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.
![Page 17: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/17.jpg)
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.
![Page 18: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/18.jpg)
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
![Page 19: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/19.jpg)
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
![Page 20: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/20.jpg)
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.
![Page 21: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/21.jpg)
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
![Page 22: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/22.jpg)
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
![Page 23: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/23.jpg)
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
![Page 24: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/24.jpg)
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.
![Page 25: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/25.jpg)
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.
![Page 26: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/26.jpg)
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
![Page 27: A WEL library](https://reader035.fdocument.pub/reader035/viewer/2022062315/56815058550346895dbe595d/html5/thumbnails/27.jpg)
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