Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette procédure pas à pas explique comment créer une application de bureau Windows traditionnelle dans Visual Studio. L’application que vous créez utilise l’API Windows pour afficher Hello, Bureau Windows ! dans une fenêtre. Vous pouvez utiliser le code que vous développez dans cette procédure pas à pas comme modèle pour créer des applications de bureau Windows.
L’API Windows (également connue sous le nom d’API Win32, d’API Windows Desktop et d’API Windows Classique) est une infrastructure de travail basé sur le langage C pour la création d’applications Windows. Il a été utilisé pour créer des applications Windows depuis des décennies. Des frameworks plus avancés et plus faciles à programmer ont été basés sur l’API Windows, par exemple, les frameworks MFC, ATL et .NET. Même le code Windows Runtime le plus moderne pour les applications UWP et Store écrites en C++/WinRT utilise l’API Windows. Pour plus d’informations sur l’API Windows, voir Index de l’API Windows.
Importante
Les blocs de code dans Le code sont des extraits explicatifs, et non pas des étapes à coller à mesure que vous allez. Ils omettent le code d’accompagnement afin que chaque concept soit plus facile à comprendre. Après avoir créé le projet vide, utilisez la source complète et pouvant être générée dans Générer le code.
Prérequis
Microsoft Windows 7 ou versions ultérieures. Nous recommandons Windows 11 ou une version ultérieure pour une meilleure expérience de développement.
Visual Studio. Pour plus d’informations sur le téléchargement et l’installation de Visual Studio, consultez Installer Visual Studio. Lorsque vous exécutez le programme d’installation, assurez-vous que la charge de travail développement Desktop en C++ est activée. Ne vous inquiétez pas si vous n’avez pas installé cette charge de travail en même temps que Visual Studio. Vous pouvez réexécuter le programme d’installation et l’installer maintenant.
Une compréhension de base de l’utilisation de l’IDE Visual Studio. Si vous avez déjà utilisé des applications de bureau Windows, vous n’aurez probablement aucun mal à suivre. Pour une introduction, consultez Visite guidée des fonctionnalités de l’IDE Visual Studio.
Vous connaissez bien le langage C++. Ne vous inquiétez pas, nous ne faisons rien de bien compliqué.
Créer un projet de bureau Windows
Suivez les étapes suivantes pour créer votre premier projet de bureau Windows. Ne collez pas les extraits de code individuels au fur et à mesure. Après avoir créé le projet, utilisez la source complète dans Générer le code.
Pour afficher les étapes de votre version préférée de Visual Studio, utilisez le sélecteur de version situé en haut de la table des matières de cette page.
Pour créer un projet de bureau Windows dans Visual Studio
Dans le menu principal, choisissez Fichier>Nouveau>Projet pour ouvrir la boîte de dialogue Créer un projet.
En haut de la boîte de dialogue, définissez Langage sur C++ , Plateforme sur Windows et Type de projet sur Bureau.
À partir de la liste filtrée des types de projets, choisissez Assistant Windows Desktop, puis choisissez Suivant. Dans la page suivante, entrez un nom pour le projet, par exemple DesktopApp.
Choisissez le bouton Créer pour créer le projet.
La boîte de dialogue Projet Windows Desktop s’affiche maintenant. Dans la liste déroulante type d’application, veillez à sélectionner application de bureau (.exe). Étant donné que nous créons une application Windows, le choix de l’application console donne lieu à un projet qui ne se construira pas compte tenu du code que nous allons utiliser. Puis, sous Options supplémentaires, sélectionnez Projet vide. Cliquez sur OK pour créer le projet.
Dans l’Explorateur de solutions, cliquez avec le bouton droit de la souris sur le projet DesktopApp, choisissez Ajouter, puis choisissez Nouvel élément.
L’animation montre un clic droit sur le nom du projet dans l’Explorateur de solutions, le choix de l’option Ajouter dans le menu qui apparaît, puis le choix de l’option Nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément , sélectionnez Fichier C++ (.cpp). Dans la zone Nom , tapez un nom pour le fichier, par exemple
HelloWindowsDesktop.cpp. Choisissez Ajouter.
Votre projet est maintenant créé et votre fichier source est ouvert dans l’éditeur.
Pour créer un projet de bureau Windows dans Visual Studio 2017
Dans le menu Fichier, choisissez Nouveau, puis Projet.
Dans la boîte de dialogue Nouveau projet, dans le volet gauche, développez Installé>Visual C++, puis sélectionnez Windows Desktop. Dans le volet moyen, sélectionnez Assistant Windows Desktop.
Dans la zone Nom , tapez le nom du projet, par exemple, DesktopApp. Choisissez OK.
Dans la boîte de dialogue Projet Windows Desktop, sous Type d’application, sélectionnez Application Windows (.exe). Sous Options supplémentaires, sélectionnez Projet vide. Vérifiez que l’en-tête précompilé n’est pas sélectionné. Cliquez sur OK pour créer le projet.
Dans l’Explorateur de solutions, cliquez avec le bouton droit de la souris sur le projet DesktopApp, choisissez Ajouter, puis choisissez Nouvel élément.
L’animation montre un clic droit sur le nom du projet dans l’Explorateur de solutions, le choix de l’option Ajouter dans le menu qui est apparu, puis le choix de l’option Nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément , sélectionnez Fichier C++ (.cpp). Dans la zone Nom , tapez un nom pour le fichier, par exemple
HelloWindowsDesktop.cpp. Choisissez Ajouter.
Votre projet est maintenant créé et votre fichier source est ouvert dans l’éditeur.
Pour créer un projet de bureau Windows dans Visual Studio 2015
Dans le menu Fichier, choisissez Nouveau, puis Projet.
Dans la boîte de dialogue Nouveau projet, dans le volet de gauche, développez Installé>Modèles>Visual C++, puis sélectionnez Win32. Dans le volet central, sélectionnez Projet Win32.
Dans la zone Nom , tapez le nom du projet, par exemple, DesktopApp. Choisissez OK.
Sur la page Vue d’ensemble de l’Assistant Application Win32, cliquez sur Suivant.
Sur la page Paramètres de l’application, sous Type d’application Windows, sélectionnez Application Windows. Sous Options supplémentaires, décochez En-tête précompilé, puis sélectionnez Projet vide. Cliquez sur Terminer pour créer le projet.
Dans l’Explorateur de solutions, cliquez avec le bouton droit de la souris sur le projet DesktopApp, choisissez Ajouter, puis choisissez Nouvel élément.
L’animation montre un clic droit sur le nom du projet dans l’Explorateur de solutions, le choix de l’option Ajouter dans le menu qui apparaît, puis le choix de l’option Nouvel élément.
Dans la boîte de dialogue Ajouter un nouvel élément , sélectionnez Fichier C++ (.cpp). Dans la zone Nom , tapez un nom pour le fichier, par exemple
HelloWindowsDesktop.cpp. Choisissez Ajouter.
Votre projet est maintenant créé et votre fichier source est ouvert dans l’éditeur.
Le code
Ensuite, vous apprendrez à créer le code d’une application de bureau Windows dans Visual Studio.
Comment le programme s’adapte-t-il ?
Une application de bureau Windows traditionnelle utilise plusieurs éléments de code de configuration avant de pouvoir afficher une fenêtre :
| Composant du programme | Purpose |
|---|---|
| En-têtes et déclarations partagées | Fournissez Windows types et déclarez des valeurs utilisées par plusieurs fonctions. |
WinMain |
Inscrit la classe de fenêtre, crée et affiche la fenêtre, puis exécute la boucle de message. |
WndProc |
Traite les messages de Windows, tels que les demandes de peinture ou de fermeture de la fenêtre. |
Les extraits suivants se concentrent sur une partie du programme à la fois. La source complète combine les parties dans l’ordre approprié.
Où le code commence à s’exécuter dans une application de bureau Windows
Tout comme chaque application C et C++ doit avoir une
mainfonction comme point de départ, chaque application de bureau Windows doit avoir uneWinMainfonction. La syntaxe deWinMainest la suivante.int WINAPI WinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow );Pour plus d’informations sur les paramètres et la valeur de retour de cette fonction, consultez Point d’entrée WinMain.
Remarque
Quels sont tous ces mots supplémentaires, tels que
WINAPI, ouCALLBACK, ouHINSTANCE, ou_In_? L’API Windows traditionnelle utilise largement les typedefs et les macros de préprocesseur pour faire abstraction de certains détails des types et du code spécifique à la plate-forme, tels que les conventions d’appel, les déclarations__declspecet les pragmas du compilateur. Dans Visual Studio, vous pouvez utiliser la fonctionnalité d’informations rapides IntelliSense pour voir ce que ces typesdefs et macros définissent. Placez votre souris sur le mot d’intérêt ou sélectionnez-le, puis appuyez sur Ctrl+K, Ctrl+J pour une petite fenêtre contextuelle qui contient la définition. Pour plus d’informations, consultez Utilisation d’IntelliSense. Les paramètres et les types de retour utilisent souvent annotations SAL pour vous aider à intercepter les erreurs de programmation. Pour plus d’informations, voir Utilisation des annotations SAL pour réduire les défauts du code C/C++.Les programmes de bureau Windows nécessitent
<windows.h>. Vous voyez également fréquemment#include <tchar.h>. C’est pour faciliter l’écriture d’une application qui peut fonctionner aveccharouwchar_t. La façon dont elle fonctionne est que vous utilisez plutôt laTCHARmacro dans votre code.TCHARse résout enwchar_tlorsque votre projet définit le symboleUNICODE; sinon, se résout enchar. Si vous générez toujours avec UNICODE activé, vous n’avez pas besoin deTCHARet pouvez simplement utiliserwchar_tdirectement. Pour plus d’informations, consultez Utilisation de mappages de texte générique. Le code suivant présente ces deux instructions#includeen haut du fichier.#include <windows.h> #include <tchar.h>Avec la fonction
WinMain, chaque application de bureau Windows doit avoir une fonction de procédure de fenêtre. Cette procédure pas à pas nomme la fonctionWndProc, mais vous pouvez lui donner le nom de votre choix dans votre code. La syntaxe deWndProcest la suivante.LRESULT CALLBACK WndProc( _In_ HWND hWnd, _In_ UINT message, _In_ WPARAM wParam, _In_ LPARAM lParam );Dans cette fonction, vous écrivez du code pour gérer les messages que l’application reçoit de Windows quand événements se produisent. Par exemple, si un(e) utilisateur(-trice) choisit un bouton OK dans votre application, Windows vous envoie un message. Vous écrivez du code à l’intérieur d’une fonction
WndProcqui effectue le travail approprié. Cela s'appelle gérer un événement. Vous ne traitez que les événements pertinents pour votre application.Pour plus d’informations, consultez Window Procedures.
Ajouter une fonctionnalité à la fonction WinMain
Avant WinMain, déclarez les valeurs et la procédure de fenêtre que les autres parties du programme utilisent. Ces déclarations s’affichent avant WinMain dans la source complète :
// 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;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
Dans cette fonction
WinMain, vous devez capturer quelques informations de base sur votre fenêtre principale. Pour ce faire, remplissez une structure de typeWNDCLASSEX. La structure contient des informations sur la fenêtre, telles que l’icône de l’application, la couleur d’arrière-plan de la fenêtre, le nom à afficher dans la barre de titre, entre autres. Il est important de noter qu’il contient un pointeur de fonction vers votre procédure de fenêtre qui gère les messages que Windows envoie à votre application. L’exemple suivant montre une structure typiqueWNDCLASSEX: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);Pour plus d’informations sur les champs de cette structure, consultez
WNDCLASSEX.Une fois que vous avez rempli la structure, inscrivez-la
WNDCLASSEXauprès de Windows afin qu’elle sache à propos de votre fenêtre et comment y envoyer des messages. Utilisez la fonctionRegisterClassExet transmettez la structure de la classe de fenêtre en tant qu’argument. La macro_Tfait correspondre le littéral de chaîne au type de caractère sélectionné parTCHAR, comme décrit dans le passage précédent sur Unicode. Le code suivant montre comment inscrire la classe de fenêtre.if (!RegisterClassEx(&wcex)) { MessageBox(NULL, _T("Call to RegisterClassEx failed!"), _T("Windows Desktop Guided Tour"), NULL); return 1; }Créez une fenêtre à l’aide de la
CreateWindowExfonction.// 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 doesn't 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; }Cette fonction retourne un
HWND, qui est un handle de fenêtre. Un handle s'apparente à un pointeur. Windows l’utilise pour suivre les fenêtres que vous créez. Pour plus d'informations, consultez Types de données Windows.À ce stade, la fenêtre a été créée, mais nous devons toujours indiquer à Windows de le rendre visible. C’est ce que fait ce code :
// The parameters to ShowWindow explained: // hWnd: the value returned from CreateWindowEx // nCmdShow: the fourth parameter from WinMain ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd);La fenêtre affichée n’est qu’un rectangle vide, car vous n’avez pas encore implémenté la fonction
WndProc. L’application ne traite pas encore les messages que Windows lui envoie maintenant.Pour gérer les messages, nous ajoutons d’abord ce qu’on appelle une boucle de message pour écouter les messages envoyés par Windows. Lorsque l’application reçoit un message, cette boucle le transmet à votre fonction
WndProcpour qu’elle le traite. La boucle de message ressemble au code suivant :MSG msg; while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int) msg.wParam;Pour plus d’informations sur les structures et les fonctions de la boucle de message, voir
MSG,GetMessage, TranslateMessage, etDispatchMessage.Une fonction de base
WinMainqui crée la fenêtre principale de l’application et écoute les messages que Windows envoie à votre application ressemble au code suivant :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 doesn't 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; }
Gérer les messages dans la fonction WndProc
Pour gérer les messages que l’application reçoit, vous implémentez une instruction
switchdans votre fonctionWndProc.Un message important à gérer est
WM_PAINT. L’application reçoit ce messageWM_PAINTquand une partie de sa fenêtre affichée doit être mise à jour. L’événement peut se produire lorsqu’un(e) utilisateur(-trice) déplace une fenêtre devant la vôtre, puis la déplace à nouveau. Il reçoit ce message lors du premier affichage de votre fenêtre, ce qui vous permet d’afficher l’interface utilisateur de votre application. Votre application découvre ces événements quand Windows les envoie. Lors de l’affichage initial de la fenêtre, tout son contenu doit être mis à jour.Pour gérer un message
WM_PAINT, il faut d’abord appelerBeginPaint, puis gérer toute la logique de disposition du texte, des boutons et des autres contrôles dans la fenêtre. Appelez ensuiteEndPaint. Pour cette application, le code entreBeginPaint()etEndPaint()afficheHello, Windows desktop!dans la fenêtre que vous avez créée dansWinMain(). Dans le code suivant, la fonctionTextOutaffiche le texte à l’emplacement spécifié dans la fenêtre.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, static_cast<int>(_tcslen(greeting))); // TextOut expects an int here but _tcslen returns a size_t. Thus the cast. // End application-specific layout section. EndPaint(hWnd, &ps); break; }Dans le code précédent,
HDCest un descripteur d’un contexte de périphérique associé à la zone cliente de la fenêtre. Lorsque vous dessinez dans la fenêtre, utilisez cette poignée pour faire référence à la zone cliente. Utilisez les fonctionsBeginPaintetEndPaintpour préparer et terminer le dessin dans la zone cliente.BeginPaintretourne un handle au contexte d’appareil d’affichage utilisé pour dessiner dans la zone cliente ;EndPaintmet fin à la demande de peinture et libère le contexte de l’appareil.Une application gère généralement de nombreux autres messages. Par exemple,
WM_CREATEest envoyé lorsqu’une fenêtre est créée pour la première fois etWM_DESTROYlorsque la fenêtre est fermée. Le code suivant illustre une fonctionWndProcde base, mais complète :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, static_cast<int>(_tcslen(greeting))); // TextOut expects an int here but _tcslen returns a size_t. Thus the cast. // 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; }
Générer le code
Comme promis, le code complet de l’application de travail suit.
Pour générer cet exemple
Supprimez tout le code dans
HelloWindowsDesktop.cppdans l’éditeur. Copiez cet exemple de code et collez-le dansHelloWindowsDesktop.cpp:// HelloWindowsDesktop.cpp // compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c #include <windows.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 doesn't 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, static_cast<int>(_tcslen(greeting))); // TextOut expects an int here but _tcslen returns a size_t. Thus the cast. // 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; }Dans le menu Générer , choisissez Générer la solution. Les résultats de la compilation apparaissent dans la fenêtre Sortie dans Visual Studio.
L’animation montre que l’on clique sur le bouton Enregistrer tout, puis que l’on choisit Construire > Construire une solution dans le menu principal.
Pour exécuter l'application, appuyez sur F5. Une fenêtre avec le texte
Hello, Windows desktop!doit apparaître.
Félicitations ! Vous avez créé une application de bureau Windows traditionnelle.