Convertisseur euro/franc

Description

Ce programme a été créé sous DEV C++ ( Compilateur WMing) en utilisant l'API de Windows.
J'ai donc décidé d'afficher son code souce à titre d'ewemple pour les débutants en C++.
J'espère que ce dernier comblera vos attentes.
Bonne Programmation à tous.

Source / Exemple :


// euro.cpp
 // Copyright (C) 2001 GrandMother
 //
 // This library is free software; you can redistribute it and/or modify
 // it under the terms of the GNU Lesser General Public License as published
 // by the Free Software Foundation; either version 2.1 of the License, or
 // (at your option) any later version.
 //
 // This library is distributed in the hope that it will be useful,
 // but WITHOUT ANY WARRANTY; without even the implied warranty of
 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 // GNU Lesser General Public License for more details.
 //
 // You should have received a copy of the GNU Lesser General Public License
 // along with this program; if not, write to the Free Software
 // Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA //

#include <windows.h>   // Fichiers d'en-tête  appelés pour
#include <string.h>    // les besoins du programme //
#include <stdlib.h>

#define IDC_MAIN_TEXT 1001   // Définition de l'identificateur IDC_MAIN_TEXT //

typedef struct buttons {  // Définition de la structure des boutons poussoirs//
   int style;
   TCHAR *text;
   }; 
typedef struct edit {     // Définition de la structure de l'éditeur //
   DWORD style;
   TCHAR *text;
       };
edit label = { ES_CENTER, TEXT("") };   // Définition de l'éditeur //
buttons bouton[] = {
   BS_PUSHBUTTON, TEXT("Francs"),       // Définition des boutons //
   BS_PUSHBUTTON, TEXT("Euros"), 
   BS_PUSHBUTTON, TEXT("Clear") };
void calcul(HWND edit, BOOL option) {  // Définition de la fonction calcul //
 DWORD nbchar;            // Définition des variables //
 char buffer[40];
 int str ='.', compte, i, j ;
 size_t nbchartotal, nbcharstr;
 LPSTR liste, buf, liste_one;
 double chiffre;
  nbchar = GetWindowTextLength(edit)+1;   //Taille du texte //
  buf = LPSTR(GlobalAlloc(GPTR, nbchar)); // Allouer la mémoire selon celle-ci //
    if (GetWindowText(edit, buf, nbchar)) { // Si texte il y a, le renvoyer //
     if (option) {
      chiffre =  atof(buf)*6.55957;    // String -> Double //
     } else {
      chiffre =  atof(buf)/6.55957;    // String -> Double //
        }
      liste = _gcvt(chiffre, 15, buffer);    // Double -> String //
      liste_one = strrchr(liste, str);       // Chaîne dérivée de 'liste' à partir de "." //
      nbchartotal = strlen(liste);           // Nbre de caractère de la chaîne //
      nbcharstr = strlen(liste_one);         // Nbre de caractère de la chaîne //
      compte = (nbchartotal+4)-nbcharstr;    // Nbre de caractère à prendre en compte //
      char result[nbchartotal];              // Recopier les caractères à prendre en compte //
        for (j=0; j<nbchartotal; j++) {
         if (j<compte) {
          result[j] = liste[j];
         } else {
          result[j] = NULL;
               }
            }
     SetWindowText(edit, result);
          }
  GlobalFree(buf);
     };
// Déclarer la procédure Windows //
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
// Mettre le nom de la classe dans la variable globale //
static TCHAR szClassName[ ] = "ConvertFrsEuros";
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{
    HWND hwnd;               // Handle (identificateur) de la fenêtre //
    MSG messages;            // Ici, les messages de l'application sont sauvées //
    WNDCLASSEX wincl;        // Structure de données de la classe Windows //

   // Structure de Windows //
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      // Fonction appelée par Windows //
    wincl.style = CS_DBLCLKS;                 // Attraper le double click //
    wincl.cbSize = sizeof(WNDCLASSEX);

    // Utiliser l'icône par défaut et le pointeur de la souris //
    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL; // Pas de Menu //
    wincl.cbClsExtra = 0;   // Pas d' extrabytes pour la structure ou l'instance de Windows //
    wincl.cbWndExtra = 0;
    // Utiliser le gris clair comme couleur de fond pour la fenêtre //
   // Vous pouvez aussi remplacer "wincl.hbrBackground = static_cast<HBRUSH> //
 //  (GetStockObjet(LTGRAY_BRUSH))" par "wincl.hbrBackground = (HBRUSH)     //
// COLOR_WINDOW" si cela ne marche pas avec le premier. L'effet sera le même et le //
// code plus stable.                      //
    wincl.hbrBackground = static_cast<HBRUSH> (GetStockObject(LTGRAY_BRUSH));

    // Registre de la classe Windows. Si echec, quitter le programme //
    if(!RegisterClassEx(&wincl)) return 0;

    // Succès : commencer le programme //
    hwnd = CreateWindowEx(
           0,                   // Possibilités d'extension //
           szClassName,         // Nom de la classe //
           "Convertisseur Francs/Euros",         // Intitulé de la fenêtre //
           WS_OVERLAPPEDWINDOW, // Style de la fenêtre //
           CW_USEDEFAULT,       // Windows décide de la position sur l'écran //
           CW_USEDEFAULT,
           310,                 // Longueur de la fenêtre en pixels //
           300,                 // Largeur de la fenêtre en pixels //
           HWND_DESKTOP,        // La fenêtre est une fenêtre-enfant du bureau //
           NULL,                // Pas de menus //
           hThisInstance,       // Handle (identificateur) de l'instance du programme //
           NULL                 // Pas de création de données pour Windows //
           );

    // Rendre la fenêtre visible à l'écran //
    ShowWindow(hwnd, nFunsterStil);
    // Démarrer le message loop.  Cela est fait sauf si GetMessage() retourne 0 //
    while(GetMessage(&messages, NULL, 0, 0))
    {
         // Messages-clé virtuels -> Messages sous forme de caractères //
           TranslateMessage(&messages);
           // Renvoyer les messages à la procédure de Windows //
           DispatchMessage(&messages);
    }

    // La valeur renvoyée par le programme est zéro //
    return messages.wParam;
}

// Cette fonction est appelée par la fonction de Windows DispatchMessages() //
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static HWND hwndbutton[3], hwndedit;
    static HINSTANCE hinstance;
    int static xbutton, ybutton;
    int i;
    switch (message)                  // Handle(identificateur) des messages //
    {      case WM_CREATE:            // Créer les fenêtres //
           xbutton = LOWORD(GetDialogBaseUnits());  // Abscisse de la fenêtre principale //
           ybutton = HIWORD(GetDialogBaseUnits());  // Ordonnée de la fenêtre principale //
           hwndedit = CreateWindow(TEXT("Edit"),label.text , WS_CHILD|WS_VISIBLE|WS_BORDER|label.style, xbutton+65, ybutton+10, 20*xbutton, 7*ybutton/4, hwnd, (HMENU)IDC_MAIN_TEXT, ((LPCREATESTRUCT)lParam)->hInstance, NULL); // Créer l'éditeur pour taper les chiffres (Nom, style, taille, position, handle(identificateur) , etc..) //
           SetCaretBlinkTime(200);    // Timer sur le caret (ou '|') //
           for (i=0; i<3; i++) {      // Créer les différents boutons (Nom, style, taille, position, handle(identificateur), etc...) //
           hwndbutton[i] = CreateWindow(TEXT("Button"), bouton[i].text, WS_CHILD|WS_VISIBLE|bouton[i].style,xbutton+65, ybutton+60*(i+1), 20*xbutton, 7*ybutton/4, hwnd,(HMENU)i, ((LPCREATESTRUCT)lParam)->hInstance, NULL);
              }
           return 0;
           break;
           case WM_SETFOCUS: // Si fenêtre fille //
             SetFocus(GetDlgItem(hwndedit, IDC_MAIN_TEXT));
           break;
           case WM_COMMAND:  // Fonction de commande //
             switch(LOWORD (wParam)) {  // Si wParam est vrai //
               case 0:    // Hanble du bouton "Francs" //
                 calcul(hwndedit, true);       // Appel fonction calcul //
                break;
               case 1:    // Hanble du bouton "Euro" //
                  calcul(hwndedit, false);     // Appel fonction calcul //
                break;
               case 2:    // Hanble du bouton "Clear" //
                  SetWindowText(hwndedit, ""); // Appel fonction calcul //
                break;
                 }
           break;
           case WM_DESTROY:
           PostQuitMessage(0);        // envoyer un WN_QUIT dans le message de queue //
           break;
           default:
                          // Pour les messages par défaut //
           return DefWindowProc(hwnd, message, wParam, lParam);
         }
    return 0;
      }

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.