Sunteți pe pagina 1din 7

Ministerul Educației al Republicii Moldova

Universitatea Tehnică a Moldovei

Facultatea Calculatoare, Informatică şi Microelectronică

Departamentul Ingineria Software şi Automatică

Raport
Lucrarea de laborator nr.1
Disciplina: Programarea Windows

A efectuat: st. gr.____________________

A verificat conf.univ., dr. Beșliu Victor

Chișinău - 2017
Tema: Aplicații Windows

Scopul lucrării: De studiat bazele și principiile de creare a aplicațiilor Windows.

Sarcina lucrării: Creați o aplicație Windows, în centrul zonei Client al căreia este afișat un mesaj ”Lucrarea
de laborator a studentului…”. La redimensionarea ferestrei, mesajul trebuie să fie afișat în centrul zonei
Client.

Listingul programului:
#include <windows.h>

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,

PSTR szCmdLine, int iCmdShow)

static char szAppName[] = "HelloWin" ;

HWND hwnd ;

MSG msg ;

WNDCLASSEX wndclass ;

wndclass.cbSize = sizeof (wndclass) ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;

wndclass.lpfnWndProc = WndProc ;

wndclass.cbClsExtra =0;

wndclass.cbWndExtra =0;

wndclass.hInstance = hInstance ;

wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;

wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;

wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;

wndclass.lpszMenuName = NULL ;

wndclass.lpszClassName = szAppName ;

wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;

RegisterClassEx (&wndclass) ;

hwnd = CreateWindow (szAppName, // window class name

"The Hello Program", // window caption


WS_OVERLAPPEDWINDOW, // window style

CW_USEDEFAULT, // initial x position

CW_USEDEFAULT, // initial y position

CW_USEDEFAULT, // initial x size

CW_USEDEFAULT, // initial y size

NULL, // parent window handle

NULL, // window menu handle

hInstance, // program instance handle

NULL) ; // creation parameters

ShowWindow (hwnd, iCmdShow) ;

UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))

TranslateMessage (&msg) ;

DispatchMessage (&msg) ;

return msg.wParam ;

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)

HDC hdc ;

PAINTSTRUCT ps ;

RECT rect ;

switch (iMsg)

case WM_CREATE :

PlaySound ("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC) ;

return 0 ;

case WM_PAINT :

hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

FillRect(GetDC(hwnd),&rect,CreateSolidBrush(RGB(6,161,130)));
SetTextColor(hdc,RGB(6,18,15));

SetBkMode(hdc,TRANSPARENT);

DrawText (hdc, "Lucrare de laborator nr.1 a studentei gr. TI-154 Balan Ana ", -1, &rect,

DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;

return 0 ;

case WM_DESTROY :

PostQuitMessage (0) ;

return 0 ;

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;

Pentru a compila din linia de comandă am utilizat următoarele comenzi:

Rezultatul programului:
Întrebări de control:
1. Care este sarcina principală a procedurii de fereastră?

Procedura de fereastră este e funcţie care se poate afla chiar în program sau într-o bibliotecă cu
legături dinamice. Windows trimite un mesaj către o fereastră prin apelarea procedurii de fereastră.
Procedura de fereastră prelucrează anumite informaţii pe baza mesajului primit, apoi returnează
controlul sistemului de operare.

2. Pe baza la ce se creează o fereastră?

O fereastră este creată întotdeauna pe baza unei „clase de fereastră". Clasa specifică procedura de
fereastră care prelucrează mesajele trimise către fereastră. Folosirea unei clase de fereastră permite ca în
baza aceleiași clase să se creeze mai multe ferestre care, ca urmare, folosesc aceeași procedură de
fereastră.
3. Descrieți câmpurile clasei de fereastră.

wcex.style - stilul clasei

wcex.lpfnWndProc - adresa procedurii de fereastră

wcex.cbClsExtra - rezervă un spaţiu suplimentar în structura clasei

wcex.cbWndExtra - rezervă un spaţiu suplimentar în structura ferestrei

wcex.hInstance - variabila handle a instanţei

wcex.hIcon - definește o pictogramă

wcex.hCursor - încarcă un cursor predefinit pentru mouse

wcex.hbrBackground - precizează culoarea fondului zonei client a ferestrelor

wcex.lpszMenuName - specifică meniul ferestrei

wcex.lpszClassName - numele clasei

wcex.hIconSm - defineste o pictogramă

4. Ce este o variabilă handle?

Orice fereastră din Windows are o variabilă handle. O variabilă handle este o variabilă care se
folosește pentru indicarea ferestrei. Multe funcții Windows au un parametru hwnd care specifică
fereastra la care se referă funcția respectivă. Dacă un pogram creează mai multe ferestre, fiecare are o
variabilă handle diferită.

5. Ce se întâmplă cu mesajele nedescrise în procedura de fereastră, dar plasate în coada de mesaje?

Orice mesaj pe care procedura de fereastră nu-l prelucrează este transmis funcției DefWindowProc.

6. Descrieți funcțiile utilizate în program.

 LoadIcon – încarcă o pictogramă care va fi folosită de program


 LoadCursor – încarcă un indicator pentru mouse care urmează să fie folosit de program
 GetStockObject – obține un obiect grafic (în acest caz o pensulă utilizată pentru desenarea
fondului ferestrei)
 RegisterClassEx – înregistrează o clasă de fereastră pentru fereastra programului
 CreateWindow – creează o fereastră în baza unei clase de fereastră
 ShowWindow – afișează o fereastră pe ecran
 GetMessage – preia un mesaj din coada de mesaje
 TranslateMessage – convertește unele dintre mesajele de la tastatură
 DispatchMessage – trimite un mesaj către o procedură de fereastra
 PlaySound – redă un fișier de sunet
 BeginPaint –inițiază o operație de desenare a ferestrei
 GetClientRect – obține dimensiunile zonei “Client” a ferestrei
 DrawText – afișează un text
 EndPaint – încheie o operație de desenare
 PostQuitMessage – inserează un mesaj de încheiere în coada de așteptare
 DefWindowProc – execută operațiile prestabilite de prelucrare a mesajelor

Concluzie:
În cadrul acestei lucrări de laborator am studiat bazele și principiile de creare a aplicațiilor Windows.
Efectuând lucrarea dată am învățat ca Windows suportă mai mult de o mie de apeluri de funcții pe care le pot
folosi aplicațiile, câteva din cele mai importante fiind CreateWindow, ShowWindow, RegisterClassEx,
DrawText etc.
O diferență între funcțiile din C++ și funcțiile Windows este următoarea: în cazul funcțiilor C++ codul
funcțiilor este legat direct de codul programului, pe când codul funcțiilor Windows este stocat în fișiere din
afara programului, numite biblioteci cu legături dinamice.

Bibliografie:
1. Beșliu, Victor; Iacob, Mihaela; Panu, Cristina, Îndrumar de laboratoare la Programarea Windows,
UTM, Chișinău, 2006
2. http://elearning.utm.md/moodle/course/view.php?id=17&section=1, Beșliu Victor, 13.02.17

S-ar putea să vă placă și