Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze handleiding wordt uitgelegd hoe je een traditionele Windows-bureaubladtoepassing maakt in Visual Studio. De toepassing die u maakt, maakt gebruik van de Windows-API om Hello, Windows-bureaublad! in een venster weer te geven. U kunt de code die u in dit scenario ontwikkelt als patroon gebruiken om Windows-bureaubladtoepassingen te maken.
De Windows-API (ook wel bekend als de Win32-API, Windows Desktop-API en de klassieke Windows-API) is een op C gebaseerde framework voor het maken van Windows-toepassingen. Het is al tientallen jaren gebruikt om Windows-toepassingen te maken. Meer geavanceerde en eenvoudiger te programmeren frameworks zijn gebouwd op de Windows-API, bijvoorbeeld de MFC-, ATL- en .NET-frameworks. Zelfs de modernste Windows Runtime-code voor UWP- en Store-apps die zijn geschreven in C++/WinRT maakt gebruik van de Windows-API eronder. Zie de Windows API-index voor meer informatie over de Windows-API.
Belangrijk
In de sectie Code bouwen aan het einde van dit artikel ziet u de volledige code. Deze handleiding behandelt de verschillende stukjes code die in een Windows-app worden geplaatst, maar sommige details worden weggelaten in de codefragmenten om je te focussen op de belangrijkste onderdelen. U kunt de volledige code kopiëren en aan het einde in uw project plakken.
Vereiste voorwaarden
Microsoft Windows 7 of nieuwere versies. We raden Windows 11 of hoger aan voor de beste ontwikkelervaring.
Visual Studio. Zie Visual Studio installeren voor meer informatie over het downloaden en installeren van Visual Studio. Wanneer u het installatieprogramma uitvoert, moet u ervoor zorgen dat de desktopontwikkeling met de C++ -workload is gecontroleerd. U hoeft zich geen zorgen te maken als u deze workload niet hebt geïnstalleerd toen u Visual Studio hebt geïnstalleerd. U kunt het installatieprogramma opnieuw uitvoeren en het nu installeren.
Basiskennis van het gebruik van Visual Studio IDE. Als u eerder Windows-bureaublad-apps hebt gebruikt, kunt u het waarschijnlijk bijhouden. Zie Visual Studio IDE-functierondleiding voor een inleiding.
Enige bekendheid met de C++-taal. Maak je geen zorgen, we doen niets te ingewikkeld.
Een Windows-bureaubladproject maken
Volg deze stappen om uw eerste Windows-bureaubladproject te maken. Zoals vermeld aan het begin van dit artikel, is de voltooide code beschikbaar in de sectie Code bouwen aan het einde van de handleiding. Volg de stappen voor het maken van het project, maar wacht met het plakken van de volgende codefragmenten tot het einde, wanneer de volledige applicatiecode wordt gepresenteerd. Sommige details worden weggelaten in de codefragmenten om u te richten op de belangrijkste onderdelen. U kunt de volledige code kopiëren en aan het einde in uw project plakken.
Als u de stappen voor de gewenste versie van Visual Studio wilt zien, gebruikt u de versieselector boven aan de inhoudsopgave op deze pagina.
Een Windows-bureaubladproject maken in Visual Studio
Kies bestand>nieuw>project in het hoofdmenu om het dialoogvenster Een nieuw project maken te openen.
Stel bovenaan het dialoogvenster Taal in op C++, stel Platform in op Windows en stel Projecttype in op Desktop.
Kies in de gefilterde lijst met projecttypen Windows-bureaubladwizard en kies vervolgens, Volgende. Voer op de volgende pagina een naam in voor het project, bijvoorbeeld DesktopApp.
Kies de knop Maken om het project te maken.
Het dialoogvenster Windows-bureaubladproject wordt nu weergegeven. Zorg ervoor dat u in de vervolgkeuzelijst Toepassingstypebureaubladtoepassing (.exe) selecteert. Aangezien we een Windows-toepassing maken, zal het kiezen van 'Consoletoepassing' resulteren in een project dat niet zal worden gebouwd met de code die we gaan gebruiken. Selecteer vervolgens onder Aanvullende opties de optie Leeg project. Kies OK om het project te maken.
Klik in Solution Explorer met de rechtermuisknop op het DesktopApp-project , kies Toevoegen en kies Vervolgens Nieuw item.
De animatie toont het klikken met de rechtermuisknop op de projectnaam in Solution Explorer, het kiezen van Toevoegen in het menu dat wordt weergegeven en kies vervolgens Nieuw item.
Selecteer C++-bestand (.cpp) in het dialoogvenster Nieuw item toevoegen. Typ in het vak Naam bijvoorbeeld een naam voor het bestand
HelloWindowsDesktop.cpp. Kies Toevoegen.
Uw project is nu gemaakt en het bronbestand wordt geopend in de editor.
Een Windows-bureaubladproject maken in Visual Studio 2017
Kies in het menu BestandNieuw en kies dan Project.
Vouw in het dialoogvenster Nieuw project in het linkerdeelvenster Geïnstalleerde>Visual C++ uit en selecteer Windows Desktop. Selecteer Windows Desktop Wizard in het middelste deelvenster.
Typ in het vak Naam een naam voor het project, bijvoorbeeld DesktopApp. Kies OK.
Selecteer in het dialoogvenster Windows-bureaubladproject onder Toepassingstype de optie Windows-toepassing(.exe). Onder Extra opties, selecteer Leeg project. Zorg ervoor dat vooraf gecompileerde header niet is geselecteerd. Kies OK om het project te maken.
Klik in Solution Explorer met de rechtermuisknop op het DesktopApp-project , kies Toevoegen en kies Vervolgens Nieuw item.
In de animatie ziet u met de rechtermuisknop op de projectnaam in Solution Explorer klikken, het menu Toevoegen kiezen dat wordt weergegeven en vervolgens Nieuw item kiezen.
Selecteer C++-bestand (.cpp) in het dialoogvenster Nieuw item toevoegen. Typ in het vak Naam bijvoorbeeld een naam voor het bestand
HelloWindowsDesktop.cpp. Kies Toevoegen.
Uw project is nu gemaakt en het bronbestand wordt geopend in de editor.
Een Windows-bureaubladproject maken in Visual Studio 2015
Kies in het menu BestandNieuw en kies dan Project.
In het dialoogvenster Nieuw project, vouw in het linkerdeelvenster Geïnstalleerde>Sjablonen>Visual C++ uit en selecteer Win32. Selecteer Win32 Project in het middelste deelvenster.
Typ in het vak Naam een naam voor het project, bijvoorbeeld DesktopApp. Kies OK.
Kies Volgende op de pagina Overzicht van de wizard Win32-toepassing.
Selecteer Windows-toepassing op de pagina Toepassingsinstellingen onder Toepassingstype. Schakel onder Extra opties het selectievakje Vooraf gecompileerde header uit en selecteer Leeg project. Kies Voltooien om het project te maken.
Klik in Solution Explorer met de rechtermuisknop op het DesktopApp-project, kies Toevoegen en kies Vervolgens Nieuw item.
De animatie toont het klikken met de rechtermuisknop op de projectnaam in Solution Explorer, het kiezen van Toevoegen in het menu dat wordt weergegeven en kies vervolgens Nieuw item.
Selecteer C++-bestand (.cpp) in het dialoogvenster Nieuw item toevoegen. Typ in het vak Naam bijvoorbeeld een naam voor het bestand
HelloWindowsDesktop.cpp. Kies Toevoegen.
Uw project is nu gemaakt en het bronbestand wordt geopend in de editor.
De code
Leer vervolgens hoe u de code voor een Windows-bureaubladtoepassing maakt in Visual Studio.
Waar code wordt uitgevoerd in een Windows-bureaubladtoepassing
Net zoals elke C-toepassing en C++-toepassing een
mainfunctie als uitgangspunt moeten hebben, moet elke Windows-bureaubladtoepassing eenWinMainfunctie hebben.WinMainheeft de volgende syntaxis.int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow );Zie Het WinMain-toegangspunt voor informatie over de parameters en de retourwaarde van deze functie.
Opmerking
Wat zijn al die extra woorden, zoals
WINAPI, ofCALLBACK, ofHINSTANCE_In_? De traditionele Windows-API gebruikt typedefs en preprocessormacro's uitgebreid om enkele details van typen en platformspecifieke code weg te nemen, zoals aanroepen van conventies,__declspecdeclaraties en compilerpragma's. In Visual Studio kunt u de functie Snelle info van IntelliSense gebruiken om te zien wat deze typedefs en macro's definiëren. Beweeg de muisaanwijzer over het gewenste woord of selecteer het en druk op Ctrl+K, Ctrl+I voor een klein pop-upvenster met de definitie. Zie IntelliSense gebruiken voor meer informatie. Parameters en retourtypen gebruiken vaak SAL-aantekeningen om programmeerfouten te ondervangen. Zie SAL-aantekeningen gebruiken om C/C++ codefouten te verminderen voor meer informatie.Windows-desktopapplicaties hebben
<windows.h>nodig. U ziet ook vaak#include <tchar.h>. Dat is om het gemakkelijker te maken om een app te schrijven die kan werken met ofcharwchar_t. De manier waarop het werkt, is dat u in plaats daarvan deTCHARmacro in uw code gebruikt, die uiteindelijkwchar_twordt omgezet als hetUNICODEsymbool in uw project is gedefinieerd, anders wordt dit omgezet inchar. Als u altijd bouwt met UNICODE ingeschakeld, hebt u dat niet nodigTCHARen kunt u gewoon rechtstreeks gebruikenwchar_t. Zie Algemene teksttoewijzingen gebruiken voor meer informatie. De volgende code toont deze twee#includeinstructies boven aan het bestand.#include <windows.h> #include <tchar.h>Naast de
WinMainfunctie moet elke Windows-bureaubladtoepassing ook een vensterprocedurefunctie hebben. Deze functie wordt eenWndProcgenoemd, maar u kunt deze elke gewenste naam geven in uw code.WndProcheeft de volgende syntaxis.LRESULT CALLBACK WndProc( _In_ HWND hWnd, _In_ UINT message, _In_ WPARAM wParam, _In_ LPARAM lParam );In deze functie schrijft u code om berichten af te handelen die de toepassing ontvangt van Windows wanneer er gebeurtenissen optreden. Als een gebruiker bijvoorbeeld een knop OK in uw toepassing kiest, wordt er een bericht naar u verzonden. U schrijft code in een
WndProcfunctie die al het nodige werk uitvoert. Het heet het verwerken van een gebeurtenis. U verwerkt alleen de gebeurtenissen die relevant zijn voor uw toepassing.Zie Vensterproceduresvoor meer informatie.
Functionaliteit toevoegen aan de WinMain functie
In de
WinMainfunctie moet u enkele basisinformatie over uw hoofdvenster vastleggen. Dat doet u door een structuur van het typeWNDCLASSEXin te vullen. De structuur bevat informatie over het venster, zoals het toepassingspictogram, de achtergrondkleur van het venster, de naam die moet worden weergegeven in de titelbalk, onder andere. Belangrijk is dat het een functiepointer bevat naar uw vensterprocedure die de berichten verwerkt die Door Windows naar uw app worden verzonden. In het volgende voorbeeld ziet u een typischeWNDCLASSEXstructuur:WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION);Zie voor meer informatie over de velden van deze structuur
WNDCLASSEX.Zodra u de structuur hebt ingevuld, registreert u deze
WNDCLASSEXbij Windows zodat deze weet over uw venster en hoe u berichten naar het venster verzendt. Gebruik deRegisterClassExfunctie en geef de structuur van de vensterklasse door als argument. De_Tmacro wordt gebruikt omdat we hetTCHARtype gebruiken volgens de voorgaande discussie over Unicode. De volgende code laat zien hoe u de vensterklasse registreert.if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; }Maak een venster met behulp van de
CreateWindowExfunctie.static TCHAR szWindowClass[] = _T("DesktopApp"); static TCHAR szTitle[] = _T("Windows Desktop Guided Tour Application"); // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, height) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindowEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; }Deze functie retourneert een
HWND, een ingang naar een venster. Een handgreep lijkt enigszins op een aanwijzer. Windows gebruikt dit om de vensters bij te houden die u maakt. Zie Windows-gegevenstypen voor meer informatie.Op dit moment is het venster gemaakt, maar we moeten Windows nog vertellen om het zichtbaar te maken. Dat is wat deze code doet:
// The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindowEx // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);Het weergegeven venster is slechts een lege rechthoek omdat u de
WndProcfunctie nog niet hebt geïmplementeerd. De toepassing verwerkt nog niet de berichten die windows naar de toepassing verzendt.Om de berichten te verwerken, voegen we eerst een zogenaamde berichtenlus toe om te luisteren naar de berichten die Door Windows worden verzonden. Wanneer de toepassing een bericht ontvangt, verzendt deze lus deze naar uw
WndProcfunctie die moet worden verwerkt. De berichtlus lijkt op de volgende code:MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam;Zie ,
MSGGetMessageen voor meer informatie over de structuren en functies in de berichtenlusDispatchMessage.Een basisfunctie
WinMainwaarmee het hoofdvenster van de toepassing wordt gemaakt en luistert naar berichten die door Windows uw app worden verzonden, lijkt op de volgende code:int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // Store instance handle in our global variable hInst = hInstance; // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, height) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindowEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindowEx // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; }
Berichten in de WndProc functie verwerken
Als u berichten wilt verwerken die door de toepassing worden ontvangen, implementeert u een
switchinstructie in uwWndProcfunctie.Een belangrijk bericht dat moet worden verwerkt, is
WM_PAINT. De toepassing ontvangt eenWM_PAINTbericht wanneer een deel van het weergegeven venster moet worden bijgewerkt. De gebeurtenis kan optreden wanneer een gebruiker een venster voor uw venster verplaatst en deze weer weg verplaatst. Het ontvangt dit bericht de eerste keer dat uw venster wordt weergegeven, zodat u de gebruikersinterface van uw toepassing kunt weergeven. Uw toepassing vindt informatie over deze gebeurtenissen wanneer Windows deze verzendt. Wanneer het venster voor het eerst wordt weergegeven, moet het allemaal worden bijgewerkt.Als u een
WM_PAINTbericht wilt afhandelen, roept u eerst aanBeginPainten verwerkt u vervolgens alle logica om de tekst, knoppen en andere besturingselementen in het venster in te delen. Roep vervolgensEndPaintaan. Voor deze toepassing wordt de code tussenBeginPaint()enEndPaint()weergegeven in het venster dat u hebt gemaakt inHello, Windows desktop!metWinMain(). In de volgende code geeft deTextOutfunctie de tekst weer op de opgegeven locatie in het venster.PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; }In de voorgaande code
HDCis een ingang voor een apparaatcontext die is gekoppeld aan het clientgebied van het venster. Wanneer u in het venster tekent, gebruikt u dit om naar het clientgebied te verwijzen. Gebruik deBeginPaintenEndPaintfuncties om de tekening in het clientgebied voor te bereiden en te voltooien.BeginPaintretourneert een verwijzing naar de weergaveapparaatcontext die wordt gebruikt voor tekenen in het clientgebied;EndPaintbeëindigt de tekenaanroep en geeft de apparaatcontext vrij.Een toepassing verwerkt doorgaans veel andere berichten. Wordt bijvoorbeeld
WM_CREATEverzonden wanneer een venster voor het eerst wordt gemaakt enWM_DESTROYwanneer het venster wordt gesloten. De volgende code toont een eenvoudige maar volledigeWndProcfunctie:LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }
De code bouwen
Zoals beloofd, volgt de volledige code voor de werkende toepassing.
Om dit voorbeeld te bouwen
Verwijder alle code in
HelloWindowsDesktop.cppin de editor. Kopieer deze voorbeeldcode en plak deze inHelloWindowsDesktop.cpp:// HelloWindowsDesktop.cpp // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c #include <windows.h> #include <stdlib.h> #include <string.h> #include <tchar.h> // Global variables // The main window class name. static TCHAR szWindowClass[] = _T("DesktopApp"); // The string that appears in the application's title bar. static TCHAR szTitle[] = _T("Windows Desktop Guided Tour Application"); // Stored instance handle for use in Win32 API calls such as FindResource HINSTANCE hInst; // Forward declarations of functions included in this code module: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow ) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = WndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(wcex.hInstance, IDI_APPLICATION); wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = szWindowClass; wcex.hIconSm = LoadIcon(wcex.hInstance, IDI_APPLICATION); if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // Store instance handle in our global variable hInst = hInstance; // The parameters to CreateWindowEx explained: // WS_EX_OVERLAPPEDWINDOW : An optional extended window style. // szWindowClass: the name of the application // szTitle: the text that appears in the title bar // WS_OVERLAPPEDWINDOW: the type of window to create // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y) // 500, 100: initial size (width, height) // NULL: the parent of this window // NULL: this application does not have a menu bar // hInstance: the first parameter from WinMain // NULL: not used in this application HWND hWnd = CreateWindowEx( WS_EX_OVERLAPPEDWINDOW, szWindowClass, szTitle, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 100, NULL, NULL, hInstance, NULL ); if (!hWnd) { MessageBox(NULL, _T("Call to CreateWindowEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; } // The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindowEx // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); // Main message loop: MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam; } // FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM) // // PURPOSE: Processes messages for the main window. // // WM_PAINT - Paint the main window // WM_DESTROY - post a quit message and return LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { PAINTSTRUCT ps; HDC hdc; TCHAR greeting[] = _T("Hello, Windows desktop!"); switch (message) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); // Here your application is laid out. // For this introduction, we just print out "Hello, Windows desktop!" // in the top left corner. TextOut(hdc, 5, 5, greeting, _tcslen(greeting)); // End application-specific layout section. EndPaint(hWnd, &ps); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hWnd, message, wParam, lParam); break; } return 0; }Kies Build Solution in het menu Build. De resultaten van de compilatie worden weergegeven in het venster Uitvoer in Visual Studio.
In de animatie ziet u dat u op de knop Alles opslaan klikt en vervolgens Build > Build Solution kiest in het hoofdmenu.
Druk op F5 om de toepassing uit te voeren. Er moet een venster met de tekst
Hello, Windows desktop!worden weergegeven.
Gefeliciteerd! U hebt een traditionele Windows-bureaubladtoepassing gebouwd.