CATEGORII DOCUMENTE |
Arhitectura Windows - fundamente
1. Intelegerea arhitecturii Windows
Procese
Virtual Memory System.
Fire si Multitasking.
Fire , Messages, sii Message Queues.
Programarea condusa de evenimente
2. Anatomia Aplicatiilor pentru Windows
Elementele unei aplicatii Windows
Lansarea in executie a unei aplicatii.
Procesarea mesajelor.
3. Analiza unei Aplicatii simple pentru Windows
Functia WinMain.
Window Procedure.(procedura de fereastra).
Functiile de Ferestra si MFC.
Cand dezvoltati aplicatii Windows-based, dvs puteti alege dintr-o larga varietate de medii de programare in functie de cerintele aplicatiei dvs. Multi programatori aleg mediul C+ + pentru dezvoltare aplicatiilor Windows-based pentru ca el este orientat pe obiect si furnizeaza un acces simplificat la complexitatea sistemului de operare Windows si cea mai mare parte a functiilor( API - application pragraming interface) . Limbajul C+ + poate fi folosit in combinatie cu o biblioteci de clase , in plus simplifica procesul de dezvoltarea al aplicatiilor grupind functiile API in unitatile logice si incapsulind(preluind) comportarea de baza a ferestrelor si altor obiecte in clase refolosibile.
Aceast curs se concentreaza pe Microsoft Foundation Class( MFC) Library, biblioteca de clase creata de Microsoft pentru a fi folosita in combinatie cu Visual C+ +( versiunea Microsoft de C+ +). Dvs puteti sa folositi aceste unelte impreuna pentru a dezvolta aplicatii in C++ pentru Windows.
MFC extinde modelul programarii orientate pe obiect folosit in aplicatiile pentru Windows. Pentru ca MFC este bazat pe modelul de programare Windows, este necesara intelegere arhitecturii de baza a sistemului de operare Windows inainte de a invata cum putem folosi clasele in scrierea unei aplicatii. Daca dvs veniti in programarea cu MFC si stapiniti programarea traditionala pentru Windows intr-un limbaj cum ar fi C si Windows SDK(Softare Development Kitt= unelte pentru dezvoltarea de aplicatii pentru Windows in C), dvs sunteti deja familiar cu aceste concepte. Daca nu ati mai avut contact cu programarea pentru Windows, atunci capitol acest este pentru dvs.
Acest capitol furnizeaza o vedere de ansamblu asupra arhitecturii de programare a aplicatiilor pentru Windows si o scurta prezentare a ceea ce se intimpla in spate cind ruleaza o aplicatie(in culise) pentru a vedea cum lucreaza o aplicatie Windows-based.
Obiective:
La sfarsitul acestui capitol, dvs veti fi in stare sa:
Definiti ce sint procesel, firele de executie, si multitasking.
Descrieti structura de management a memorie.
Explicati scopul mesajelor si conceptul de programare condusa de evenimente.
Descrieti componentele minime ale unei aplicatii simple pentru Windows.
Explicati cum este initializata o aplicatie si cum sunt create ferestrele.
1. Intelegerea arhitecturii Windows
Inaintea de a incepe scrierea aplicatiilor MFC, dvs ar trebui sa intelegeti cateva caracteristici arhitecturale de baza ale aplicatiilor Windows si ale sistemului de operare Windows.
Aceasta parte explica structura aplicatiilor Windows-based la momentul executiei. Aici dvs veti invata despre diferentele intre aplicatii, procese, si fire de executie. Dvs veti invata de asemenea despre cum sistemul de operare Windows gestioneaza procesele si firele de executie pentru o maxima performanta.
Aceasta parte include urmatoarea tematica:
Procese
Memoria virtuala a sistemului.
Fire si Multitasking.
Fire , Messages, sii Message Queues.
Programarea condusa de evenimente.
Procese
Termenul 'proces' si termenul mai mult comun 'aplicatie' sunt uneori confundati (folositi alternativ unul in locul celuilalt). Oricum, in mediul de dezvoltare al aplicatiilor pentru Windows, se face o deosebire(distinctie) intre proces si o aplicatie.
O aplicatie este o succesiune statica de instructiuni care impreuna alcatuiesc un fisier executabil. Un proces este de obicei definit ca o instanta a unei aplicatii care ruleaza. Un proces are propriul lui spatiu de adrese, contine cel putin unul fir de executie, si i se rezerva anumite resurse, ca de exemplu : fisiere, memorie, si tuburi.(conducte de comunicare intre procesul respectiv si alte procese sau intre fire de executie).
Un proces se compune din:
Un program executabil.
Un spatiu de adrese particular in memorie.
Resursele de sistem, ca de exemplu fisiere, pipe(conducte), porturi de comunicare, si semafoare.
Cel putin unu fir de executie, unde un fir de executie este o cale a executiei.
Memoria virtuala a sistemului
Intr-un sistem de operare unde sint permise procesele multiple, fiecare proces trebuie sa fie protejat fata de alte procese in memorie (pentru a nu folosi acelasi spatiu de memorie).Sistemul de operare Windows este proiectat sa furnizeze aceasta protectie.
Exista doua tipuri de memorie in sistemul de operare Windows:
Memorie fizica.
-memoria RAM.
Memorie virtuala.
- Consta in 4 gigaocteti( GB) de adrese, sau 232 octeti de memoria accesibila care este disponibila aplicatiei dvs. Aceasta nu inseamna ca exista 4 GB de memoria fizica reala. Fiecare aplicatie are la dispozitie 2 GB de adrese in timp ce sistemul de operare isi rezerva 2 GB pentru propriul uz.
Nota: In Windows NT, o aplicatie poate avea pana la 3 GB de adrese petru propriul uz.
Cum lucreaza Memoria Virtuala.
Cand o aplicatie este lansata in executie, au loc urmatoarele:
1. Sistemul de operare creeaza un nou proces. Fiecarui proces ii este rezervat 2 GB adrese de memorie virtuale( nu memorie fizica) pentru propriul uz( gestiune).
2. Managerul de memorie virtuala mapeaza codul aplicatiei intr-o locatie din spatiul de adrese virtuale rezervat aplicatiei, si incarca in mod curent codul de care este nevoie in memoria fizica.( Adresel virtuale nu au nici o relatie cu locatia in memoria fizica in care ruleaza aplicatia).
3.Daca aplicatia foloseste orice biblioteca legata dinamic(.dll), Dll -urile sunt mapate in spatiul de adrese virtuale al procesului si sint incarcate in memoria fizica cand are nevoie de ele.
4. Spatiu pentru articole cum ar fi datele si stivele sint alocate in memoria fizica si mapate in spatiul de adrese virtuale.
5. Aplicatia incepe executia folosind adresele din spatiul de adrese virtuale, si managerul de memorie virtuala mapeaza(face lagatura , coreleaza)fiecare acces la memorie virtuala la o locatie fizica.
O aplicatie niciodata nu acceseaza direct memoria fizica. Managerul de memorie virtula controleaza in intregime accesul la memoria fizica prin cereri pentru acces folosind adresele virtuale.
Exista animatie care explica acest proces de gestionare al memoriei virtuale
Avantajul folosirii Memoriei Virtuale(Virtual Memory System.)
Modul de gestionare a memoriei prin intermediul memorie virtuale permite atit garantarea unei executii robuste a aplicatie cit si pentru a simplifica gestionarea memorie.
Asa cum s-a mentionat mai devreme principala grija pentru o aplicatie care ruleaza in mod multitasking este protectia acelei executii de aplicatie de la interpunere cu alte aplicatii. Fortand aplicatiile pentru a folosi memoria virtuala permite sistemului de operare sa furnizeze o partitionare de memorie fizica stricta intre aplicatii. Daca o aplicatie cere un spatiu de memorie particular,sistemul de operare va face coreletia (furniza o harta) intre acea aplicatie si memorie fizica.
Memorie virtuala de asemenea permite aplicatiilor sa vizualizeze memoria ca un spatiu continuu, 2 GB de spatiul de memorie neavind de-a face cu modul si arhitectura de gestionare a memoriei fizice folosite de catre sistemul de operare.
Fire de executie si multitasking
In timp ce un proces poate sa fie considerat ca o sarcina pe care sistemul de operare sa trebuiasca sa o execute, ca de exemplu o aplicatie Excel(foii de calcul tabelar) care ruleaza, un fir reprezinta una din eventualele multe sarcini de care este nevoie pentru a indeplini un job( un document). De exemplu, controlul interfeteia utilizator, tiparirea, si efectuarea unor calcule in foaia de calcul tabelar pot sa fie sarcinile aplicatiei de calcul tabelar(Excel) care sunt asignate fiecare uni fir de executie. Un fir ruleaza inspatiului de adrese al unui proces si foloseste resursele alocat procesului respectiv.
Un proces poate sa aiba singur fir (proces singlethread), sau el poate sa fie multifir (sa contina mai multe fire de executie).Procesele multifir sint folositoare cand rezolvarea unei sarcii necesita un timp considerabil. Sarcina respectiva poate fi preluata de un singur fir, in timpul cit acesta lucreaza alte sarcii pot fi indeplinite de alte fire. Firele pot sa fie programate pentru executie in mod independent pe procesor,lucru care face sa para ca se realizeaza mai multe sarcini in acelasi timp. Beneficiul utilizatorului este ca poata sa continuie lucrul in timp ce un fir realizeaza sarcina primita. Alt beneficiu este ca pe un sistem multiprocesor pe care ruleaza Windows NT, doua sau mai multe fire pot fi rulate concurent(in acelasi timp), cite unul pe fiecare procesor.
Multitasking-ul este capacitatea unui sistem de operare de a da senzatia de rulare simultana a mai multor fire de executie .Sistemul de operare realizeaza multitasking permitand fiecarui fir sa fie activ pentru un timp foarte scurt( zeci de millisecunde), si dupa aceea schimband directia la firul urmator programat. Acest proces, a denumit ' context switching"(context schimband directia,) este realizat astfel:
1.Un fir care ruleaza pana ce cuanta de timp de fir este epuizata sau pana ce firul trebuie sa astepte o resursa sa devenia disponibila.
2. Salvand contextul de firului.
3. Incarcand alt context de fir.
4. Repetand aceasta succesiune atat timp cat exista fire in asteptare sa se execute.
O ilustrare a acestui mod de lucru este reprezentata in desenul de mai jos:
Idle =asteptare.
Fire, Mesaje, Cozi de mesaje(message queues)
Fiecare fir de executie are propria lui coada de intrare virtuala pentru prelucrarea mesajelor de la suportul fizic(hardware), de la alte procese, sau de la sistemul de operare. Aceste cozi de mesaje functioneaza asincron, astfel - cand un proces expediaza un mesaj catre coada de mesaje a unui fir,se poate revenii din functia care a trimis (expediat)mesajul fara trebuiasca sa astepte ca firul catre care a fost trimis sa prelucreze mesajul. Acel fir care a primit mesajul poate sa acceseze si sa prelucreze mesajul cand el este gata.
De un interes special este manipularea evenimentelor de mouse si de tastatura. Un fir special al sistemului, cunoscut ca Raw Input Thread(intrarea cruda de fir) RIT), receptioneaza toate evenimentele de la tastatura si de la mouse. Oricand RIT primeste evenimentele hardware(suportului fizic) de la proceso,singura sa functie este sa le distribuie catre coada de intrare virtuala de mesaje a firului corespunzator. Astfel, in imprejurari normale, nici un fir al aplicatiei nu trebuie sa astepte evenimentele de la hardware(suportul fizic).
Animatie care prezinta cum sunt mesajele manipulate prin sistemul coada de mesaj.
Programarea condusa de evenimente
Cel mai important concept pentru a intelege modul de lucru al aplicatiilor pentru Windows este programarea condusa de evenimente(Event-Driven Programming) .
Pentru a auzi un expert cum descrie eveniment-condusa program, faceti clic pe aceasta icoana.???
Modul cel mai bun pentru a intelege programarea condusa de evenimente este prin contrast programarea procedurala pentru MS-DOS. Sub MS-DOS, utilizatori introduc parametrii in liniei de comanda cu scopul de a controla modul in care o aplicatie ruleaza. Sub Windows, utilizatori pornesc aplicatia mai intai, si dupa aceea sistemul de operare Windows asteapta ca utilizatori sa exprime alegerile lor selectand articole dintr-o interfata grafica utilizator( GUI).Astfel o aplicatie pentru Windows porneste si dupa aceea asteapta pana ce utilizatorul da clic pe un buton sau selecteaza un articol de meniu inainte ca altceva sa se intample. Acesta este cunoscut ca conceptul de event-driven programming.
2. Anatomia Aplicatiilor pentru Windows
Este important la scrierea aplicatiilor MFC cunoasterea elementelor care compun o aplicatie Windows si cum ferestrele transmit(rolul ferestrelor in realizarea comunicatiei intre aplicatie si utilizator) informatia intre aplicatie si utilizator.
In aceasta parte, dvs veti invata despre componentele necesare unei aplicatii Windows-based si se face o prezentare scurta despre cum sunt prelucrate mesajele in mediul Windows.
Aceasta parte include urmatoarele:
Elementele unei aplicatii Windows(Elements of a Windows-based Application.)
Cum porneste o alicatie - lanseaza in executie (How an Application Is Started).
Cum proceseaza mesajele o fereastra .(How a Window Processes Messages)
Elemntele Aplicatiilor Windows
Elementele de baza care compun o aplicatie Windows sint:
- codul,
- resursele de interfata utilizator,
- si modulele de biblioteca ce sint invocate de aplicatie prin legatura dinamica.
Codul
Continutul principal pentru oricare aplicatie este codul executabil. Aplicatiile Windows trebuie sa aiba doua functii obligatoriu. Una care se cheama WinMain, furnizeaza un punct de o intrare pentru sistemul de operare. Iar ce-a de-a doua functie este o procedura de fereastra, este necesara pentru manipularea mesajelor de la sistemul de operare.
Resursele de interfata utilizator
Multe aplicatii-definesc elementele de interfata grafica cu utilizatorul ale aplicatie ( GUI), cum ar fi meniuri si cutii de dialog, care se gasesc sub forma de sabloane si sint referite in parti speciale protejate la scriere ale executabilului corespunzator sau fisiere DLL. Cand este necesar, Windows citeste de la aceasta parte de resursa si construieste elementul de interfat grafica(GUI) dinamic.
Notati ca in timp ce resursele sunt in primul rand folosite pentru a stoca informatia despre elementele GUI a unei aplicati, orice informatie protejata la scriere poate fi plasata in partea de resursa. Avantajul este ca resursele sunt expediate precum parte a fisierului executabil, minimalizand nevoia pentru fisierele aditionale expediate cu o aplicatie.
Tabelul urmator prezinta resursele comune Win32.
Tipul de resursa Description
Accelerator Pastreaza apasarile de tasta si comenzile asociate lor.
Bitmap Contine o imagine grafica in formatul compatibil Windows.
Cutia de dialog Detalii despre controale, aranjamente, si atribute pentru cutii de
(Dialog Box) dialog.
Icon(Icoana) Pastreaza un set special de imagini(bitmap) pentru icoane.
Meniu Detalii de text si macheta pentru meniuri si articolele lor.
String Table
(Tabele de siruri) Pastreaza siruri de caracter si o valoare asociata (ID =identificator)
Toolbar
(Aranjamentele barei
cu butoane de bar) Detalii despre butoane sibitmapuri speciale care sunt folosite
pentru desenarea imaginilor de butoane.
Version Information
(Informatia deversiune) Mentine informatia despre versiunea program, ca de exemplu:
numele de program, autor, informatiile drepturilor de autor,
numarul de versiune, si asa mai departe.
Cursor Contine imagini speciale( bitmap) folosite pentru desenarea
cursorului.
Modulele de biblioteca.
Microsoft Windows, impreuna cu cele mai multe moderne sisteme de operare, sprijina legatura dinamica(dynamic linking), o metoda de apel a modulelor de biblioteca(fisiere care contin definitii de functii sau tipuri de date) la momentul executiei. Un modul de biblioteca este un fisier binar care contine rutine de biblioteca executabile. Un modul de o biblioteca care poate sa fie incarcat in acest stil este numit biblioteca pentru legatura dianmica, sau DLL(dynamic-link library).
Lansarea in executie a unei aplicatii
Pentru ca o aplicatie Windows sa fie lansata in executie si sa ruleze, cateva evenimente trebuie sa se intample mai intai. Cand un utilizator porneste o aplicatie, evenimentele urmatoare se intample in aceasta ordine:
1.Sistemul de operare creeaza un nou proces si un fir de executie initial.
2. Codul aplicatiei este incarcat in memorie.
3. Dll-urile de asemenea sunt incarcate in memorie, daca aplicatia foloseste librarii dinamice.
4. Spatiu pentru articole, cum ar fi date si stive,sint alocate in memoria fizica si mapate in spatiul de adrese. Virtuale.
5. Aplicatia incepe executia(ruleaza).
Prelucrarea mesajelor de catre procedura de fereastra
Cei mai multi dintre utilizatori Windows sunt familiarizati cu termenul de "fereastra" si cu elementele vizuale care caracterizeaza aplicatiile. Din punctul de vedere de programatorului, ferestrele au o noua semnificatie. Intr-o aplicatie Windows, ferestrele sunt elemntul principala pentru transmiterea de informatie de la aplicatie la utilizator. Similar, utilizatorul foloseste fereastra pentru a comunica cu aplicatia, astfel realizand comportarea dorita in realizarea unei sarcini.
Pasii urmatori explica cum o aplicatie Windows se pregateste pe ea insasi sa primeasca un mesaje care au expediat ei din coada de mesaje a sistemuli.
1.Cand o aplicatie Windows este lansata in executie, sistemul de operare se conecteaza cu aplicatia prin punctul de intrare definit anticipat. Acest punctul de intrare este definit in functia Winmain, o functie necesara in toate aplicatiile Windows.
2. Aplicatia dupa aceea creeaza una sau mai mult ferestre. Fiecare fereastra contine o procedura de fereastra care este responsabila cu madul in care fereastra va fi afisata si cum va raspunde aceasta la actiunea utilizatorului.
3. O parte de cod a numit ciclu de mesaje(message loop) recupereaza un mesajele din coada de mesaje si le restituie sistemului de operare Windows pentru a le expedia la procedura de fereastra corespunzatoare. Aceasta da o sansa aplicatie pentru a preprelucra un mesaj inainte ca el sa fie transmis ferestrei.
Codul pentru a pune in aplicare fiecare pas din acest proces este prezentat intr-o aplicatie simpla si descris amanuntit in Analyzing Simple Windows-based Application(Analiza unei aplicatii simple pentru Windows) mai tirziu in acest capitol.
In imaginea urmatoare se arata cum mesajele din coada de mesaje a sistemului sint prelucrate de catre aplicatie.
3. Analiza unei Aplicatii simple pentru Windows
In aceasta parte, dvs veti examina codul sursa al unei aplicatii simple SDK-level pentru Windows.De oarece aplicatiile MFC sunt bazate pe modelul Windows , acest exemplu va va ajuta la o mai buna intelegere a felului cum o aplicatie MFC este initializata, cum sunt create ferestrele , si cum sunt mesajele manipulate.
Toate aplicatiile Windows-based trebuie sa contina doua functii, minim, pentru a furniza functionalitate pentru aplicatie dupa cum urmeaza:
Functia WinMain.
Aceasta functie defineste punctul de intrare initial in aplicatie pentru sistemul de operare. Ea este de asemenea folosita pentru creerea fereastrei initiale si pentru a porni bucla de mesaje.
functia - procedura de fereastra.
Aceasta functie prelucreaza toate mesajele expediate de la sistemul de operare la o fereastra. Fiecare fereastra, nu conteaza cit de simpla sau complexa, are o procedura de fereastra asociata.
Exemplu care urmeaza este o aplicatie simpla astfel dvs puteti sa vedeti ce este minim necesar pentru crearea unei aplicatii Windows.
Aceasta aplicatie pur si simplu afiseaza o fereastra si deseneaza' Hello, lume!' in centrul suprafetei ei de vizualizare(View). Codul complet pentru aplicatia este urmatorul.
// Standard Windows header file.
#include <windows.h>
// Forward declaration for the message handler.
LRESULT CALLBACK MyWndProc(HWND, UINT, WPARAM, LPARAM);
// WinMain: required for all Windows applications.
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpszCmdLine, int nCmdShow)
return msg.wParam;
// This function is called by Windows to handle messages for this application.
LRESULT CALLBACK MyWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
// Call the default handler so that all messages are processed.
return DefWindowProc(hwnd, message, wParam, lParam);
Nota Pentru a rulat aceasta aplicatie, creati o aplicatie noua Win32, si dupa aceea adaugati un fisier nou cpp. Copiaza acest cod in el, si dupa aceea construieste si ruleaza aplicatia.
Segmentele de cod ale unei aplicatii, intilnite in toate aplicatiile Windows. Aceasta parte include topica urmatoare:
Functia WinMain.
Window Procedure.(procedura de fereastra)
Functiile de Ferestre si MFC
Functia WinMain
Fiecare aplicatie Windows trebuie sa contina o functie Winmain. Winmain este necesara pentru a executa trei sarcini de baza:
1. Inregistrarea clasei ferestrei in sistemul de operare.
2. Crearea in memorie a fereastrei si initializarea atributelor astfel incaitsa poata fi afisata.
3. Creazai o bucla de un mesaje care face verificari pentru a vedea daca exista mesaje pentru fereastra in coada de mesaje.(a ferestrei).
Fiecare din aceste sarcini este descrisa amanuntit mai jos.
1. Inregistrarea clasei ferestrei in sistemul de operare.
Inregistrarea clasei pentru fereastra( Registering Window Class).
Punctul de intrare pentru fiecare aplicatie Windows este functia WinMain. Functia WinMain creeaza si initializeaza o structura de date WNDCLASS, care este dupa aceea inregistrata prin apelul functiei API RegisterClass. Aceasta structura de date defineste caracteristicile unei fereastre, ca de exemplu adresa functiei de prelucrare a mesajelor(the address of the message handler), culoarea de fond, de fereastra, icoana de aplicatiei, si cursorul implicit.
Message handler=In Windows, an object, such as a view or frame window,that provides handler functions to process messages(In Windows, un obiect, ca de exemplu o vedere sau o fereastra de cadru, care furnizeaza functiile numarului asociat pentru a prelucra mesajele )
// Window structure
WNDCLASS wc;
wc.style = CS_HREDRAW | CS_VREDRAW; // style: causes repaint when resizing
wc.lpfnWndProc = (WNDPROC) MyWndProc; // the window procedure
wc.cbClsExtra = 0; // number of extra bytes following the class structure
wc.cbWndExtra = 0; // number of extra bytes following the window instance
wc.hInstance = hInstance; // this instance that the window procedure is within
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION); // the class icon
wc.hCursor = LoadCursor(NULL, IDC_ARROW); // the class cursor
wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); // background brush
wc.lpszMenuName = NULL; // the menu resource name
wc.lpszClassName = szApplicationName; // the app name
// Register the window.
RegisterClass(&wc);
2. Crearea ferestrei in memorie si initializarea atributelor ca sa poata fi afisata.
(Creating and Displaying Window.)
Odata clasa de fereastra inregistrata, WinMain apeleaza functia CreateWindow pentru a crea fereastra aplicatiei. CreateWindow in plus defineste tipul de fereastra trecind peste numele ei, amplasare, si dimensiune.
// Now create the window.
hwnd = CreateWindow(
szApplicationName, // registered class name
szApplicationName, // window name
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // x position of window
CW_USEDEFAULT, // y position of window
CW_USEDEFAULT, // width of window
CW_USEDEFAULT, // height of window
HWND_DESKTOP, // handle to parent window
NULL, // handle to menu identifier
hInstance, // handle to application instance
NULL // pointer to window-creation data
The window is then made visible by calling the following functions:
// Display the window.
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);
3. Creaza o bucla de un mesaje care face verificari pentru a vedea daca exista mesaje pentru
fereastra in coada de mesaje.(a ferestrei).
Prelucrarea Mesajelor.
In cele din urma, ciclul de mesaj recupereaza si expediaza mesajele. Aceasta este realizat intr-un ciclu while.
// Pump messages until a quit message is received.
while(GetMessage(&msg, NULL, 0,0))
Functia GetMessage recupereaza un mesaj din coada de mesaj si il plaseaza in structura de date MSG. Functia TranslateMessage traduce mesajele de taste in mesajele de caracter. Functia DispatchMessage se ocupa cu expedierile mesajelor la procedura de fereastra.
Cind se primeste un mesaj de WM_QUIT, functia GetMessage intoarce 0, se iese din functia WinMain , si programul se termina.
Window Procedure( Procedura de fereastra)
Unul din principalele motive pentru a inregistra o clasa de fereastra este sa asocieze o fereastra la procedura de fereastra.' Procedura de fereastra determina ce afiseaza fereastra in zona sa client (client area) si cum va raspunde fereastra cererile utilizator(user input). Procedurile de fereastra pot sa manipuleze mesajele cu cod adaugat de catre programator, sau lasind mesajele sa fie tratate de catre procedura de fereastra implicita.
Procedura de fereastra implicita, DefWindowProc, este furnizata de sistemul Windows si implementeaza multe comportari comune(comportamentul de baza al ) aplicatiilor Win32, ca de exemplu minimalizarea, restaurarea, sau maximizarea unei ferestre, afiseaza resursele de meniu, si asa mai departe. Daca DefWindowProc nu trateaza un mesaj, el este ignorat.
In programul demonstrativ, procedura de fereastra este numita MyWndProc. O procedura de fereastra poate sa aiba orice nume( atat timp cat el nu intra in conflict cu alte nume). O aplicatie Windows poate sa contina mai multe proceduri de fereastra, fiecare cu un nume diferit.
De obicei, se foloseste o instructiune switch si constante case pentru a trata mesajul asa cum se arata in codul urmator. Functia MyWndProc manipuleaza(trateaza) doua mesaje, WM_PAINT si WM_DESTROY. Procedura de fereastra DefWindowProc trebuie sa fie apelata sa trateza toate celelalte mesaje.
// This function is called by Windows to handle messages for this application.
LRESULT CALLBACK MyWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
// Call the default handler so that all messages are processed.
return DefWindowProc(hwnd, message, wParam, lParam);
}
Functiile de ferestra si MFC
Deoarece aplicatiile MFC sunt bazate pe modelul de dezvoltare Windows , ele depind de functionalitatea furnizata de functia WinMain si functiile procedura de fereastra.
Functia WinMain si MFC
Ca toate programele pentru Windows, aplicatiile MFC au o functie Winmain. Intr-o aplicatie MFC, oricum, dvs nu scrieti functia WinMain. Ea este furnizata cadrul de lucru este apelata cand se lanseaza aplicati. Mai multe informatii vom gasi in Classes in a Minimal MFC Application in Chapter 4.
Window Procedure(Procedura de fereastra ) si MFC.
Mfc are un sistem intern de tratare a mesajelor generate de diverse clase. Oricum, cand un mesaj nu poate sa fie manipulat(tratat) in MFC, aplicatia il transmite procedurii de fereastra implicite, DefWindowProc.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1889
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved