Modulo 1. Il primo programma Windows
In questo modulo verrà scritto un programma desktop di Windows minimo. Tutto ciò che fa è creare e visualizzare una finestra vuota. Questo primo programma contiene circa 50 righe di codice, senza contare righe vuote e commenti. Sarà il nostro punto di partenza; successivamente verranno aggiunti elementi grafici, testo, input utente e altre funzionalità.
Per altre informazioni su come creare un'applicazione desktop di Windows tradizionale in Visual Studio, vedere Procedura dettagliata: Creare un'applicazione desktop di Windows tradizionale (C++).
Ecco il codice completo per il programma:
#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);
}
È possibile scaricare il progetto di Visual Studio completo da Windows Hello Esempio mondiale.
Può essere utile fornire una breve descrizione delle operazioni di questo codice. Gli argomenti successivi esamineranno il codice in dettaglio.
-
wWinMain è il punto di ingresso del programma. All'avvio del programma, registra alcune informazioni sul comportamento della finestra dell'applicazione. Uno degli elementi più importanti è l'indirizzo di una funzione, denominato
WindowProc
in questo esempio. Questa funzione definisce il comportamento della finestra, ovvero l'aspetto, il modo in cui interagisce con l'utente e così via. - Successivamente, il programma crea la finestra e riceve un handle che identifica in modo univoco la finestra.
- Se la finestra viene creata correttamente, il programma immette un ciclo while . Il programma rimane in questo ciclo fino a quando l'utente non chiude la finestra e chiude l'applicazione.
Si noti che il programma non chiama in modo esplicito la WindowProc
funzione, anche se si è detto che questa è la posizione in cui è definita la maggior parte della logica dell'applicazione. Windows comunica con il programma passando una serie di messaggi. Il codice all'interno del ciclo while esegue questo processo. Ogni volta che il programma chiama la funzione DispatchMessage , windows richiama indirettamente la funzione WindowProc, una volta per ogni messaggio.
Contenuto della sezione
- Creazione di una finestra
- Messaggi finestra
- Scrittura della routine finestra
- Disegno della finestra
- Chiusura della finestra
- Gestione dello stato di un'applicazione
Argomenti correlati