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.
Dans ce module, nous allons écrire un programme de bureau Windows minimal. Tout ce qu’il fait est de créer et d’afficher une fenêtre vide. Ce premier programme contient environ 50 lignes de code, sans compter les lignes vides et les commentaires. Ce sera notre point de départ ; plus tard, nous ajouterons des graphiques, du texte, des entrées utilisateur et d’autres fonctionnalités.
Si vous recherchez plus de détails sur la création d’une application de bureau Windows traditionnelle dans Visual Studio, consultez procédure pas à pas : Créer une application de bureau Windows traditionnelle (C++).
Voici le code complet du programme :
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR pCmdLine, int nCmdShow)
{
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
// Create the window.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if (hwnd == NULL)
{
return 0;
}
ShowWindow(hwnd, nCmdShow);
// Run the message loop.
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0) > 0)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hwnd, &ps);
// All painting occurs here, between BeginPaint and EndPaint.
FillRect(hdc, &ps.rcPaint, (HBRUSH) (COLOR_WINDOW+1));
EndPaint(hwnd, &ps);
}
return 0;
}
return DefWindowProc(hwnd, uMsg, wParam, lParam);
}
Vous pouvez télécharger le projet Visual Studio complet à partir de exemple Windows Hello World.
Il peut être utile de donner un bref aperçu de ce que fait ce code. Les rubriques ultérieures examinent le code en détail.
-
wWinMain est le point d’entrée du programme. Au démarrage du programme, il enregistre des informations sur le comportement de la fenêtre d’application. L’un des éléments les plus importants est l’adresse d’une fonction, nommée
WindowProcdans cet exemple. Cette fonction définit le comportement de la fenêtre , son apparence, son interaction avec l’utilisateur, etc. - Ensuite, le programme crée la fenêtre et reçoit un handle qui identifie de façon unique la fenêtre.
- Si la fenêtre est créée avec succès, le programme entre une pendant boucle. Le programme reste dans cette boucle jusqu’à ce que l’utilisateur ferme la fenêtre et quitte l’application.
Notez que le programme n’appelle pas explicitement la fonction WindowProc, même si nous avons dit que c’est là que la plupart de la logique d’application est définie. Windows communique avec votre programme en lui transmettant une série de messages . Le code à l’intérieur du pendant que boucle pilote ce processus. Chaque fois que le programme appelle la fonctionDispatchMessage, Windows appelle indirectement la fonction WindowProc, une fois pour chaque message.
Dans cette section
- Création d’une fenêtre
- messages de fenêtre
- écrire la procédure de fenêtre
- peindre la fenêtre
- Fermer la fenêtre
- gestion des d’état d’application
Rubriques connexes
-
exemple de Windows Hello World