Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
I den här modulen skriver vi ett minimalt Windows-skrivbordsprogram. Allt det gör är att skapa och visa ett tomt fönster. Det första programmet innehåller cirka 50 rader kod, utan att räkna tomma rader och kommentarer. Det kommer att bli vår utgångspunkt. senare lägger vi till grafik, text, användarindata och andra funktioner.
Om du vill ha mer information om hur du skapar ett traditionellt Windows-skrivbordsprogram i Visual Studio kan du läsa Genomgång: Skapa ett traditionellt Windows Desktop-program (C++).
Här är den fullständiga koden för programmet:
#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);
}
Du kan ladda ned hela Visual Studio-projektet från Windows Hello World Sample.
Det kan vara bra att ge en kort beskrivning av vad den här koden gör. Senare avsnitt kommer att undersöka koden i detalj.
-
wWinMain är programmets startpunkt. När programmet startar registreras viss information om programfönstrets beteende. Ett av de viktigaste objekten är adressen till en funktion med namnet
WindowProci det här exemplet. Den här funktionen definierar fönstrets beteende – dess utseende, hur det interagerar med användaren och så vidare. - Därefter skapar programmet fönstret och tar emot ett handtag som unikt identifierar fönstret.
- Om fönstret har skapats anger programmet en medan loop. Programmet finns kvar i den här loopen tills användaren stänger fönstret och avslutar programmet.
Observera att programmet inte uttryckligen anropar funktionen WindowProc, även om vi sa att det är här det mesta av programlogik definieras. Windows kommunicerar med ditt program genom att skicka en serie meddelanden. Koden i medan loop driver den här processen. Varje gång programmet anropar funktionen DispatchMessage orsakar det indirekt att Windows anropar funktionen WindowProc en gång för varje meddelande.
I det här avsnittet
- Skapa en
- fönstermeddelanden
- Skriva fönsterproceduren
- Måla fönstret
- Stänga fönstret
- Hantera programtillstånd
Relaterade ämnen