MFC a motorháztető alatt, vagy a teremtés nélküli kérelmek MFC alkalmazás varázsló

Leggyakrabban, hogy hozzon létre egy új MFC alkalmazás bízott Wizard (MFC App Wizard). A varázsló előállítja az alapvető alkalmazási váz, amit később, töltse ki a megfelelő kódot, végül a hiánytalan kérelem beérkezésétől.

Kezd sablon jövőnk program azonnal elkapja a szemét egy csomó kód, ami egyfajta tűnik, egy kicsit trükkös, és részben érthetetlen, plusz mindent mindig jelenlévő érzés, hogy egy tisztességes mennyiségű kódot rejtve szemünk. Azt javaslom, hogy némi fényt a titokzatos részeit kódot generál a varázsló gondoskodó számunkra. És ugyanakkor, és hogyan a saját, segítség nélkül, egy varázsló, hozzon létre egy MFC alkalmazás.

Tehát egy kicsit rejtett kód

Minden 32 bites Windows alkalmazás két fő eleme van: WinMain funkció és WndProc. A programnak tartalmaznia kell legalább egy WinMain, plusz WndProc minden ablakot. Bár az MFC és megteremti számukra az Ön számára, de még mindig van egy ötlete, azokat kívánatos.

A fő cél a WinMain -, hogy az alkalmazás futtatásához. Ha az alkalmazás fut, a Windows azonnal hozza meg az üzenetet egy üzenetet sorban. Ahhoz, hogy ezek az üzenetek az operációs rendszer, és feldolgozza azokat, WinMain teszi három API hívást. Az első - ez GetMessage, amelynek a feladata az, hogy az üzenetet. Ezután TranslateMessage készíteni a szükséges reformokat az üzenetet. És zvklyuchenie WinMain felhívja DispatchMessage, aki beszél valamilyen WndProc üzenetet küld a feldolgozás az operációs rendszer.

Miután WndProc egy üzenetet kap, azonnal elkezd át a megfelelő processzor, hogy bizonyos műveleteket, amelyek szükségesek a kommunikáció. A munkát, mint egy programozó -, hogy írjon az adatkezelők.

A legegyszerűbb alkalmazás MFC: Kevesebb, mint 20 sornyi kódot

Ezután vesszük a legegyszerűbb szerkezet egy MFC alkalmazás. Mivel a mi feladatunk az, hogy biztosítsa a jelenlétét WinMain alkalmazása és WndProc, szükséges, hogy elnyerjem ezeket a funkciókat MFC osztályok.

alkalmazás osztály fogjuk örökölni MFC CWinApp osztályban. CWinApp minden szükséges funkciót és változók inicializálása kezdő és záró alkalmazásokat. CWinApp is tartalmaz egy mutatót m_pMainWnd, amely rámutat, hogy egy objektum osztályának a fő ablakban. Minden MFC fektetés egy és csak egy objektumot közvetlenül örökölt CWinApp. Az alábbi példában, hogy az úgynevezett „CMyApp.”

Osztályú szolgáltatás ablak örökölnek CFrameWnd. CFrameWnd is rendelkezik az összes szükséges funkciókat és változókat kell létrehozni és kezelni ablakok. Kérjük, vegye figyelembe, hogy a tényleges létrehozása a window objektum nem jár közvetlen teremtés az ablakok, de csak olyan Create () függvény létrehozásához szükséges ablakot.

Lássuk, mi történik, ha futtatni a programot. Ezeket a lépéseket lehet követni az alábbi példát:

WinMain kezd dolgozni a pont a: CMyApp app; Alkotó CMyApp típusú objektum úgynevezett „app”. Az App tartalmazza az összes tag változók és függvények CWinApp hogy indításához szükséges, és töltse ki az alkalmazás.

Ezután WinMain felhívja InitInstance () függvény a mi app. InitInstance () létrehoz egy új objektumot CMyWnd m_pMainWnd = new CMyWnd;

CMyWnd kivitelező hívások létrehozása () függvény, amely létrehoz egy példányt az ablakon, de nem jelenik meg.

Következő InitInstance () függvény egy ablakban megjeleníti parancs m_pMainWnd-> ShowWindow (m_nCmdShow);

WinMain felhívja Run () függvény, amely üzeneteket küld a többi alkalmazást.

De valójában saját példa:

Ez az, amit kap fordítása után a kódot, és futás:

MFC a motorháztető alatt, vagy a teremtés nélküli kérelmek MFC alkalmazás varázsló

Tény, hogy az ablak lesz.

Single Document Interface (Single Document) alkalmazása

A kód generálódik, ha létrehoz egy dokumentumot varázslóról (SDI), egy bonyolultabb első pillantásra, de minden működik ugyanazon elvek szerint. Azt is öröklik osztályt CWinApp. És mi örökli az ugyanabban az ablakban kezelési osztályt CFrameWnd. Azonban ebben az esetben az ablak kezelési osztály kerül meghívásra CMainFrame.

Mi osztály alkalmazására is InitInstance () függvény, de úgy néz ki, hogy egy kicsit bonyolultabb. Ezen kívül tartalmazza a következő sorokat:

Itt az alkalmazás objektum létrehoz egy mutatót egyetlen dokumentum sablont, és társítja egy új objektumot egyetlen dokumentum sablon. Látjuk, hogy a CSingleDocTemplate kivitelező vezetünk négy paraméter. Az első típus egész szám - Ez az erőforrás ID IDR_MAINFRAME. Az alábbi három paraméter jelzi osztályok a dokumentumot, a keret és kilátás. Ezután a mutatót az új CSingleDocTemplate felkerül a listára dokumentum sablonok által létrehozott alkalmazás objektumot. (Egy SDI alkalmazás, csak egy sablon.)

IDR_MAINFRAME erőforrás tartalmazza:

  • alkalmazás ikonjára.
  • alkalmazás menüjében.
  • Táblázat gyorsítók a menü.
  • Vonós hangszer. dokumentum vonal van osztva hét részből áll, mindegyik elválasztott karakter „\ n”:
  • Cím a fő ablak az ablak. Ablak cím hozzárendelve az új dokumentumot. Ha nincs megadva, akkor az alapértelmezett érték alkalmazva „Névtelen”.
  • Leírás A dokumentum egy MDI alkalmazás. Ez a karakterlánc nem használjuk SDI alkalmazás. dokumentumtípus-deklaráció, a fájl kiterjesztését az alapértelmezett dokumentum, például a „My Big Program (*. MBP).”
  • Hárombetűs kiterjesztése a dokumentum, mint például a „.mbp”
  • Név szóköz nélkül, amely azonosítja a dokumentum típusát a rendszerleíró adatbázisban.
  • Részletes dokumentum típus neve, például „My Big Program dokumentuma.” Valami ehhez hasonló sort nézhet ki: "My Big Program \ n \ n \ nSaját Big Program (* MBP). \ N.mbp \ nBigProgram \ nMBP dokumentum."

következtetés

Tehát most van egy jobb ötlete, hogy mi folyik, miután a varázsló kap a parancsot, hogy létrehoz egy új keretrendszer, de azt is, hogy szükség esetén módosíthatja egyes részei a generált kód tetszése. Például, ha meg akarja változtatni a méretét és pozícióját a fő ablak az alkalmazás, ez elég ahhoz, hogy egy kicsit változtatni a Create () függvényt. Ha kicseréli a kódot a fenti példában, a következő, akkor kap egy kisebb ablak a bal felső sarokban.

Röviden, sok lehetőséget és funkciót, ami lehet játszani. Persze nem feltétlenül változtassa meg a generált kód a varázsló, de minél többet tud arról, hogy mi folyamatok játszódnak le az alkalmazást, annál jobb lesz.

Kapcsolódó cikkek