A WEL library

Preview:

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