mfcAan de slag met mfc


Opmerkingen

De Microsoft Foundation Classes of MFC is een bibliotheek die een objectgeoriënteerde wrapper biedt rond de Win32 API. Door de "onbewerkte" Win32 API in C ++ -klassen in te sluiten, maakt MFC het aanzienlijk eenvoudiger om GUI-toepassingen te maken en bronnen te beheren.

MFC bestaat al heel lang. Het werd voor het eerst geïntroduceerd in 1992 met versie 7 van Microsoft's C / C ++ compiler. Op dit moment begon de ontwikkeling van C ++ net van start te gaan. Volgende versies van Visual Studio zijn geleverd met aanzienlijk verbeterde versies van MFC. Het is nog steeds opgenomen in de nieuwste versie van Visual Studio 2015. Maar de oude wortels zijn helaas vrij zichtbaar. Aangezien het meeste ervan vóór de standaardisatie van de C ++ -taal is ontwikkeld, maken de MFC-klassen niet volledig gebruik van moderne C ++ -functies zoals sjablonen, bieden ze hun eigen aangepaste implementaties van andere standaard C ++ -functies zoals RTTI, en gebruiken ze veel niet-standaard idioom . Deze feiten maken het bijna onmogelijk om een MFC-toepassing te compileren met een andere compiler dan die van Microsoft. Aan de positieve kant is MFC echter goed geïntegreerd in Visual Studio, waardoor de ontwikkeling aanzienlijk eenvoudiger wordt.

Tijdens de vroege ontwikkeling stond de bibliotheek bekend als Application Framework Extensions (afgekort tot AFX). De marketingafdeling veranderde later zijn naam in MFC, maar het was te laat om de code te wijzigen, dus veel van de code verwijst nog steeds naar "Afx" in plaats van "Mfc". Een opmerkelijk voorbeeld is het standaard voorgecompileerde headerbestand dat automatisch wordt gegenereerd door Visual Studio: het heet StdAfx.h .

Op 7 april 2008 bracht Microsoft een update uit voor de MFC-klassen als een out-of-band update voor Visual Studio 2008 en MFC 9. De update bevat nieuwe gebruikersinterfaceconstructies, inclusief de linten (vergelijkbaar met die van Microsoft Office 2007) en bijbehorende UI-widgets, volledig aanpasbare werkbalken, koppelvensters (zoals Visual Studio 2005) die vrij kunnen worden geplaatst of aan elke kant kunnen worden gekoppeld en documenttabs. De nieuwe functionaliteit is beschikbaar in nieuwe klassen, zodat oude applicaties nog steeds kunnen worden uitgevoerd. Deze update bouwt voort op BCGSoft's BCGControlBar Library Professional Edition en werd genoemd als MFC Feature Pack .

Dus nu bestaat MFC uit twee bibliotheken met verschillende benaderingen:

  • Klassieke MFC (wrapper voor Win32 API).
  • MFC-functiepakket (gemixte set van Win32 API-besturingselementen en nieuwe zelftekeningbesturingselementen, zoals lint).

Zie ook:

Een eenvoudig MFC-programma

// Include the MFC header:
// (you do not need to and should not include the standard Windows headers, e.g. 
// Windows.h)
#include <AfxWin.h>               // MFC core and standard components
// The following header defines resource constants, such as dialog and control IDs:
#include "resource.h"

// The basic element of an MFC application is a class that inherits from CWinApp.
class CMyApp : public CWinApp
{
    // This gets called as the application gets initialized.
    virtual BOOL InitInstance()
    {
        // Initialize a CDialog object to show in a moment.
        CDialog dlg(IDD_DIALOG1);
        // Display the dialog box as a modal dialog box.
        dlg.DoModal();

        // Return FALSE from this method to exit the application.
        return FALSE;
    }
};

// The one and only application object.
CMyWinApp theApp;
 

Samenvatting:

IDD_DIALOG1 moet de ID zijn van een dialoogvenster dat is gedefinieerd in een projectresourcebestand dat is gemaakt door een resource-editor, zoals degene die is ingebouwd in Visual Studio. (Een bronbestand heeft meestal de extensie .rc.) Om het gedrag van een dialoogvenster aan te passen, kunt u een nieuwe klasse afleiden uit CDialog.

Een modaal dialoogvenster heeft een eigen berichtenlus. De aanroep "dlg.DoModal ();" keert niet terug totdat het dialoogvenster door de gebruiker is gesloten.

Als we TRUE van InitInstance () hadden geretourneerd, zou dit de berichtenlus van de toepassing hebben gestart. Dit wordt gebruikt wanneer u een complexere, niet op dialoog gebaseerde app hebt.