a wel library

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

Upload: patsy

Post on 21-Jan-2016

56 views

Category:

Documents


0 download

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

TRANSCRIPT

Page 1: A WEL library

A WEL library

Az eiffel programozási nyelv Windows API burkoló osztálykönyvtára

Page 2: A WEL library

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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