C++ et Windows (1/3) |
Mon premier exe sous Windows |
|
 |
Ayant un jour cherché des liens sur ce sujet et n'ayant pas trouvé ce que je voulais... alors, cette petite fiche est pour vous, apprentis programmeurs, pour vous montrer comment créer rapidement votre premier .exe sous Windows ! (puristes s'abstenir... :)
|
Afficher une fenêtre Windows -
Ecrire et dessiner sur la fenêtre -
Gérer les menus
Editeur/Compilateur
N'importe quel éditeur permet d'écrire du code C++, mais vu que ce langage doit être compilé (traduit en langage machine), autant utiliser un soft permettant de faire les deux... J'ai utilisé ici Dev-C++4 de Bloodshed Software qui est Gratuit ! (7,8 Mo)
1. Afficher une fenêtre Windows
Télécharger tous les fichiers de cette étape 1
- Inclure la librairie windows.h : #include <windows.h>
- Faire quelques déclarations... :o)
- Créer la fenêtre : hwnd = CreateWindowEx(...);
- Afficher la fenêtre : ShowWindow(...);
- Puis surveiller les messages système jusqu'à ce que l'utilisateur décide de quitter :
while(GetMessage(&messages, NULL, 0, 0)) { DispatchMessage(&messages); }
|
- Auquel cas on indique à Windows que l'on a fini :
switch (message) { case WM_DESTROY: PostQuitMessage(0); // Envoie un WM_QUIT break; default: // autres messages non traîtés return DefWindowProc(hwnd, message, wParam, lParam); }
|
Ce qui donne donc pour l'instant
main-01.cpp
// Librairies #include <windows.h>
// Déclarations LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM); char szClassName[ ] = "WindowsApp"; // nom de la classe en var globale
// DEBUT int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil) { // Déclarations HWND hwnd; MSG messages; WNDCLASSEX wincl; // Structure de la fenêtre wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; // Fonction appelée par Windows wincl.style = CS_HREDRAW|CS_VREDRAW; // Redessine à chaque fois wincl.cbSize = sizeof(WNDCLASSEX); // Icônes, pointeur, etc wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor(NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH); // Fond blanc // Enregistre la classe sinon quitte le programme if(!RegisterClassEx(&wincl)) return 0;
// Création de la fenêtre hwnd = CreateWindowEx(0, szClassName, "C++ et Windows - 01", // Titre WS_OVERLAPPEDWINDOW, // Fenêtre par défaut GetSystemMetrics(SM_CXSCREEN)/4, // left GetSystemMetrics(SM_CYSCREEN)/4, // top GetSystemMetrics(SM_CXSCREEN)/2, // width GetSystemMetrics(SM_CYSCREEN)/2, // height HWND_DESKTOP, NULL, hThisInstance, NULL );
// Montre la fenêtre ShowWindow(hwnd, nFunsterStil);
// Boucle jusqu'à ce que GetMessage() retourne 0 while(GetMessage(&messages, NULL, 0, 0)) { DispatchMessage(&messages); } return messages.wParam; } // FIN
// Fonction appelée par la fonction Windows DispatchMessage() LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { // Intercepte les messages case WM_DESTROY: // Destruction de la fenêtre PostQuitMessage(0); // Envoie WM_QUIT à Windows break; default: // Messages non gérés return DefWindowProc(hwnd, message, wParam, lParam); } return 0; }
|
Didier le
01/08/2003 (79 671 hits) |
|
|