Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
1 (17)/2001 133
Prof. dr. Ion IVAN, prep. Paul POCATILU, prep. Doru CAZAN
Catedra de Informatica Economica, A.S.E. Bucuresti
WNDCLASSEX struc
cbSize dd ? ; dimensiunea structurii WNDCLASSEX
style dd ? ; stilul clasei fereastra
lpfnWndProc dd ? ; pointerul la functia fereastra
cbClsExtra dd ? ; informatii suplimentare pentru clasa
cbWndExtra dd ? ; informatii suplimentare pentru fereastra
hInstance dd ? ; identificatorul instantei curente
hIcon dd ? ; identificatorul pictogramei asociata clasei
hCursor dd ? ; cursorul asociat clasei
hbrBackground dd ? ; culoarea de fundal a ferestrelor din clasa
lpszMenuName dd ? ; pointer la sirul cu denumirea meniului
lpszClassName dd ? ; pointer la sirul cu numele clasei
hIconSm dd ? ; identificatorul pictogramei aplicatiei
WNDCLASSEX ends
Cele mai importante câmpuri sunt al treilea ate pe baza acestei clase.
si penultimul, ele continînd adresa proce- Înainte de apelul functiei RegisterClassEx
durii fereastra folosita de toate ferestrele trebuie initializate cîmpurile variabilei de
create pe baza acestei clase, respectiv nu- tip WNDCLASSEX. Initializarea câmpuri-
mele clasei fereastra. Celelalte cîmpuri de- lor se realizeaza în urmatoarea secventa de
scriu caracteristicile tuturor fe restrelor cre- cod:
;...
.data?
;...
wcex WNDCLASSEX <?>;variabila de tip structura clasa fereastra
NumeFer db 'Programare sub Windows',0 ;Numele ferestrei
hinst dd ? ;identificatorul instantei curente
;...
.code
;...
;completarea cimpurilor structurii fereastra
mov wcex.cbSize, size WNDCLASSEX
mov wcex.style, CS_VREDRAW or CS_HREDRAW or CS_DBLCLKS
mov wcex.lpfnWndProc, offset WndProc
mov wcex.cbClsExtra,0
mov wcex.cbWndExtra,0
push hinst
pop wcex.hInstance
mov wcex.hCursor,eax
mov wcex.hbrBackground,COLOR_WINDOW+1
mov wcex.lpszMenuName,0
mov wcex.lpszClassName,offset NumeFer
mov wcex.hIconSm,0
identificat prin IDC_ARROW. Atunci mai trebuie înregistrate, ele avînd prede-
când se utilizeaza cursoare standard, para- finite functiile fereastra si tratarea anumi-
metrul hInstance al functiei LoadCursor tor mesaje. Pe baza acestor clase de fe-
va fi 0. Apelul functiei RegisterClassEx restre standard se pot crea ferestre de acel
prin care se înregistreaza clasa fereastra: tip, modificându-se anumite caracteristici,
.code modul de functionare ramînînd acelasi.
;... Clasa fereastra defineste caracteristicile
;Inregistrarea clasei fereastra
push offset wcex generale ale unei ferestre, permitînd folo-
call RegisterClassEx sirea acesteia pentru crearea mai multor
;...
ferestre. Când se creeaza o fereastra cu
În cazul în care nu s-a reusit înregistrarea functia CreateWindowEx se pot specifica
clasei de fereastra, functia RegisterClass mai multe detalii despre fereastra respec-
Ex returneaza valoarea 0. tiva (cum ar fi titlul ferestrei, stilul aces-
Sunt definite câteva clase standard de teia, pozitia, meniul asociat si dimensiunea
ferestre înregistrate : "BUTTON", "EDIT", initiale).
"LISTBOX" si altele, clase fereastra ce nu Prototipul functiei CreateWindowEx este:
HWND CreateWindowEx(
DWORD dwExStyle, // stilul extins al ferestrei
LPCTSTR lpClassName, // pointer catre numele clasei înregistrate
LPCTSTR lpWindowName,// pointer catre numele ferestrei
DWORD dwStyle, // stilul ferestrei
int x, // pozitia orizontala a ferestrei
int y, // pozitia verticala a ferestrei
int nWidth, // latimea ferestrei
int nHeight, // înaltimea ferestrei
HWND hWndParent, // indicator catre fereastra parinte
HMENU hMenu, // indicator catre meniu sau fereastra copil
HINSTANCE hInstance, // indicatorul instantei curente a programului
LPVOID lpParam // pointer catre datele de creare a ferestrei
);
instantei curente a aplicatiei si numele me- Dupa apelul functiei UpdateWindow, fe-
niului definit în fisierul de resurse. Functia reastra devine vizibila pe ecran.
returneaza identificatorul de meniu asociat. Programul trebuie sa poata prelucra intra-
Dupa apelul functiei CreateWindowEx, rile de la tastatura si de mouse. Windows
fereastra a fost creata însa nu a fost si creeaza o coada de mesaje asociata fiecarui
afisata pe ecran. Pentru afisarea ferestrei program. Când apare un eveniment, acesta
sunt necesare înca doua apeluri de functii: este transformat de Windows într- un mesaj
ShowWindow respectiv UpdateWindow. care este pus în coada de mesaje a
Functia ShowWindo w are prototipul: programului. Mesajele sunt preluate din
BOOL ShowWindow(HWND hWnd, // identificato- coada de mesaje prin intermediul buclei de
// rul ferestrei
int nCmdShow // modul de afisare al fe-
mesaje. În pseudocod bucla de mesaje se
// restrei reprezinta astfel:
);
Asteapta_mesaj:
Apelul functiei în cadrul programului: Daca este apare un mesaj, preia mesajul
Daca mesajul este QUIT Atunci Iesire
push SW_SHOWNORMAL Apeleaza TranslateMessage
push hwnd Apeleaza DispatchMessage
call ShowWindow Trimite mesajul catre procedura fereastra
Înapoi la Asteapta_mesaj
Functia UpdateWindow redeseneaza zona Iesire
client a ferestrei. Prototipul acesteia este: Functia GetMessage preia un mesaj din
BOOL UpdateWindow(HWND hWnd // identificatorul coada de mesaje. Prototipul functiei Get
ferestrei
); Message :
BOOL GetMessage(
LPMSG lpMsg, // adresa structurii cu mesajul
HWND hWnd, // identificatorul ferestrei
UINT wMsgFilterMin, // primul mesaj
UINT wMsgFilterMax // al doilea mesaj
);