MFC sub capota sau crearea unei aplicatii mfc fara expertul aplicatiei

Cel mai adesea, crearea unei noi aplicații MFC este încredințată expertului (MFC App Wizard). Vrăjitorul generează scheletul principal al aplicației, pe care apoi îl umplem cu codul necesar, obținând în final aplicația finită.







Obținerea unui șablon pentru programul nostru viitor, imediat prinde ochiul o mulțime de cod, care este un fel de pare putin complicat, și parțial de neînțeles, plus tot mereu prezent sentimentul că o cantitate decentă de cod este ascuns de ochii noștri. Eu propun să facă lumină pe părțile misterioase de cod care generează expertul grijă pentru noi. În același timp, și să vedeți cum să creați singur aplicațiile MFC fără ajutorul unui vrăjitor.

Deci, un pic despre codul ascuns

Fiecare aplicație Windows pe 32 de biți are două elemente principale: funcțiile WinMain și WndProc. Programul dvs. trebuie să aibă cel puțin un WinMain, plus WndProc pentru fiecare fereastră. Deși MFC creează pentru ei pentru tine, dar au încă o idee de ei de dorit.

Sarcina principală a WinMain este lansarea aplicației. Imediat ce aplicația este lansată, Windows pune imediat mesajele aplicației în coada de mesaje. Pentru a obține aceste mesaje din sistemul de operare și pentru a le procesa, WinMain efectuează trei apeluri API. Primul este GetMessage, al cărui scop este să primească mesajul. Apoi TranslateMessage pentru a pregăti conversiile de mesaje necesare. Și în excluderea WinMain apelează DispatchMessage, care îi spune sistemului de operare care WndProc să trimită mesajul pentru procesare.

Imediat ce WndProc primește mesajul, acesta începe imediat să treacă prin intermediul instructorilor corespunzători pentru a efectua anumite acțiuni necesare pentru acest mesaj. Sarcina dvs. ca programator este de a scrie manageri de date.

Cea mai simpla aplicatie MFC: Mai putin de 20 de linii de cod

Apoi, vom analiza cea mai simplă structură a unei aplicații MFC. Deoarece sarcina noastră este de a oferi o prezență în WinMain și WndProc, trebuie să moștenim clasele pentru aceste funcții.

Vom moșteni clasa de aplicații din clasa MFC CWinApp. CWinApp toate funcțiile și variabilele necesare pentru inițializarea, pornirea și închiderea aplicației. CWinApp conține, de asemenea, indicatorul m_pMainWnd, care indică obiectul clasei ferestrei principale. Fiecare complot MFC are un singur obiect moștenit direct de la CWinApp. În exemplul de mai jos, el are numele "CMyApp".

Clasa care servește fereastră va moșteni din CFrameWnd. CFrameWnd are, de asemenea, toate funcțiile și variabilele necesare pentru crearea și gestionarea ferestrelor. Rețineți că crearea unui obiect fereastră nu creează direct fereastra în sine, ci conține doar funcția Create () necesară pentru a crea fereastra.







Să vedem ce se întâmplă când ne conducem programul. Acești pași pot fi urmăriți în exemplul de mai jos:

WinMain începe să lucreze cu punctul: aplicația CMyApp; Se creează un obiect de tip CMyApp cu numele "app.". Aplicația conține toate variabilele membre și funcțiile CWinApp care sunt necesare pentru a începe și a termina aplicația noastră.

Apoi, WinMain apelează funcția InitInstance () a aplicației noastre. InitInstance () creează un nou obiect CMyWnd cu m_pMainWnd = nou CMyWnd;

Constructorul CMyWnd apelează funcția Create (), care creează o instanță a ferestrei, dar nu o afișează.

Apoi, funcția InitInstance () afișează fereastra cu comanda m_pMainWnd-> ShowWindow (m_nCmdShow);

WinMain apelează funcția Run (), care trimite mesaje către restul aplicației.

Iată exemplul în sine:

Iată ce obținem după compilarea acestui cod și de funcționare:

MFC sub capota sau crearea unei aplicatii mfc fara expertul aplicatiei

De fapt, fereastra va fi mai mare.

Interfață unică a documentului

Codul generat de expert când creați o aplicație pentru un singur document (SDI) este mai complex la prima vedere, dar funcționează la fel. De asemenea, moștenim clasa de la CWinApp. Și moștenim aceeași clasă de management al ferestrelor din CFrameWnd. Cu toate acestea, în acest caz, clasa de gestionare a ferestrelor va fi numită CMainFrame.

Clasa noastră de aplicații are, de asemenea, funcția InitInstance (), dar pare puțin mai complicată. Printre altele, conține următoarele linii:

Aici, obiectul aplicației creează un pointer la un șablon de un singur document și îl asociază cu un nou obiect de șablon unic. Vedem că patru parametri sunt transmiși constructorului CSingleDocTemplate. Primul tip de număr întreg este ID-ul resursei IDR_MAINFRAME. Următorii trei parametri indică clase pentru document, cadru și vizualizare. Apoi, un indicator pentru noul CSingleDocTemplate este adăugat la lista șabloanelor de documente create de obiectul aplicației. (Există un singur șablon în aplicația SDI.)

Resursa IDR_MAINFRAME conține:

  • Pictograma aplicației.
  • Meniul aplicației.
  • Tabel de acceleratoare pentru meniu.
  • Linia documentului. Linia documentului este împărțită în șapte părți, separate de un simbol '\ n':
  • Titlul ferestrei ferestrei principale. Titlul ferestrei atribuit noului document. Dacă este omisă, valoarea implicită "Untitled".
  • Descrierea tipului de document în aplicația MDI. Această linie nu este utilizată în aplicația SDI. O descriere a tipului de document, cu extensia de fișier pentru acest document în mod implicit, de exemplu, "Programul meu mare (* .Mbp)".
  • O extensie de trei litere pentru tipul de document, de exemplu ".mbp"
  • Numele fără spații, care identifică tipul de document din registru.
  • Numele detaliat al tipului de document, de exemplu, "Documentul meu mare de program". Această linie poate arăta astfel: "Programul meu mare \ n \ n \ nProgramul meu mare (* .Mbp) \ n.mbp \ nBigProgram \ nMembra documentului."

concluzie

Deci, acum ai o idee mai bună despre ceea ce se întâmplă după ce asistentul este dat comanda pentru a genera un nou cadru de aplicare, dar, poate, de asemenea, daca este necesar, pentru a schimba unele părți ale codului generat la discreția ta. De exemplu, dacă doriți să modificați dimensiunea și poziția ferestrei principale a aplicației, este suficient pentru a schimba un pic de funcții Creare (). Dacă înlocuiți codul din exemplul de mai sus, următoarea, veți obține o fereastră mai mică în colțul din stânga sus al ecranului.

Pe scurt, există multe setări și funcții cu care puteți juca. Desigur, nu este nevoie să modificați codul generat de expert, dar cu cât știți mai multe despre ce procese apar în aplicație, cu atât va fi mai bine.







Articole similare

Trimiteți-le prietenilor: