Le programme
Code source
Le programme super_original.c:
//
// Un premier exemple de programme Windows
// Ce programme va afficher du texte au centre
// d'une fenêtre.
//
#include <windows.h>
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
// Voilà la fonction principale
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASSEX wndclassex;
char szClassName[ ] = "MyLittleWindow";
wndclassex.cbSize = sizeof(WNDCLASSEX);
wndclassex.style = CS_HREDRAW | CS_VREDRAW;
wndclassex.lpfnWndProc = WindowProcedure;
wndclassex.cbClsExtra = 0;
wndclassex.cbWndExtra = 0;
wndclassex.hInstance = hInstance;
wndclassex.lpszClassName = szClassName;
wndclassex.hIcon = NULL;
wndclassex.hIconSm = NULL;
wndclassex.hCursor = LoadCursor(NULL, IDC_ARROW);
wndclassex.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
wndclassex.lpszMenuName = NULL;
if(!RegisterClassEx(&wndclassex))
{
MessageBox(NULL, "Erreur lors de l'enregistrement de la classe fenêtre principale", "Erreur", MB_OK);
return 1;
}
// Création de la fenêtre principale
hwnd = CreateWindowEx(
0, // Style de fenêtre étendu, inutilisé ici
szClassName, // Nom de la classe à utiliser
"Programme super_original.c", // Chaine de caractère qui sera placée
// dans la barre de titre de la fenêtre
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, // Position en X de la fenetre, utiliser la valeur par défaut
CW_USEDEFAULT, // Position en Y de la fenetre, utiliser la valeur par défaut
CW_USEDEFAULT, // Largeur de la fenêtre, utiliser la valeur par défaut
CW_USEDEFAULT, // Hauteur de la fenêtre, utiliser la valeur par défaut
NULL, // Handle de la fenêtre parent; il s'agit de la fenetre mère, on met NULL
NULL, // Handle de menu, on n'en veut pas, on met NULL
hInstance, // Instance de l'application
NULL // Non nécessaire pour le moment
);
ShowWindow(hwnd, SW_SHOW);
UpdateWindow(hwnd);
// Voila notre boucle de messages
while(GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
// Et voila notre fonction de rappel ou
// fonction CALLBACK
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
RECT rect;
switch (message)
{
case WM_PAINT:
hdc = BeginPaint(hwnd, &ps);
GetClientRect(hwnd, &rect);
DrawText(hdc, "Un programme super original", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
EndPaint(hwnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}
Voici un screenshot de ce que va donner le code ci-dessus sous Windows XP: