Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec l'API Win32

    17 juin 2006 à 12:19:53

    Bonjours j'ai fini les cour de mateo sur la SDL et j'ai voulu me lancer sur l'API Win32 pour creer des logiciel et des fenetre windows.

    J'ai trouver un site pas mal qui propose un tuto simpas pour l'apprentissage :
    http://texel3d.free.fr/win32/index.html

    Au chapitre 2, il propose se petit code source à compiler:

    #include <windows.h>

    LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
    {
         static CHAR szAppName[] ="Salut" ;
         HWND         hwnd ;                // handle de le fenêtre
         MSG          msg ;   // structure de message
         WNDCLASS     wndclass ;        // Classe de fenêtre

         wndclass.style         = NULL;               // style de la fenêtre
         wndclass.lpfnWndProc   = WndProc ;  // Nom de la procédure de fenêtre
         wndclass.cbClsExtra    = 0 ;              // réserve de la place supplémentaire dans la structure de la classe
         wndclass.cbWndExtra    = 0 ;              // réserve de la place supplémentaire dans la  structure de la fenêtre
         wndclass.hInstance     = hInstance ;                     // handle de l'application
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;        // charge un icône pour l'application
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;        // charge style de le curseur de la souris
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;   // définit la couleur de fond de l'application
         wndclass.lpszMenuName  = NULL ;                    // nom du menu à charger (ici aucun)
         wndclass.lpszClassName = szAppName ;                            // nom de la classe

         if (!RegisterClass (&wndclass))        // enregistrement de la classe
         {
              MessageBox (NULL, "Problème!", szAppName, MB_ICONERROR) ;
              return 0 ;
         }
         hwnd = CreateWindow (            // Création de la fenêtre
                    szAppName,                          // nom de la classe
                    "Texel",               // titre de la fenêtre
                    WS_OVERLAPPEDWINDOW,      // style de la fenêtre
                    CW_USEDEFAULT,               // position initiale sur x
                    CW_USEDEFAULT,              // position initiale sur y
                    CW_USEDEFAULT,              // largeur initiale
                    CW_USEDEFAULT,              // hauteur initiale
                    NULL,                       // handle de la fenêtre mère ( pas de fenêtre fille donc pas de fenêtre mère)
                    NULL,                      // handle du menu de la fenêtre ( pas de menu ici donc NULL)
                    hInstance,                  // handle de l'instance (application)
                    NULL) ;                     // paramètres de création ( très souvent égal à NULL)
         
         ShowWindow (hwnd, iCmdShow) ;            // affiche la fenêtre à l'écran
         UpdateWindow (hwnd) ;                  // rafraîchis le contenu de la zone cliente ( la fenêtre devient visible)
         
         while (GetMessage (&msg, NULL, 0, 0))  // lit un message de la file d'attente
         {
              TranslateMessage (&msg)// traduis les msg d'événement de touche en msg de caractère
              DispatchMessage (&msg) ;    // appel la procédure de fenêtre
         }
         return msg.wParam ;
    }


    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
        switch (message)
         {

           case WM_DESTROY: // message de fermeture du programme
              PostQuitMessage (0) ;
              return 0 ;

           case WM_KEYDOWN:  // tape d'une touche détecter
                     switch(wParam)
                     {
                            case VK_LEFT:   // la touche tapée est "flèche gauche"
                                    MessageBox (NULL,"Flèche gauche","Information", MB_ICONINFORMATION) ;
                                    break;
                            case VK_ESCAPE: // la touche tapée est "Echape"
                                    DestroyWindow(hwnd);
                                    break;
                            default:
                                    break;
                     }
                     break;

         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }


    Je le compile avec dev C++ mais il m'affiche une erreur à la ligne suivante :
    wndclass.style         = NULL;      // style de la fenêtre
    • Partager sur Facebook
    • Partager sur Twitter
      17 juin 2006 à 13:10:33

      Citation : el diablo 7

      Je le compile avec dev C++ mais il m'affiche une erreur à la ligne suivante :

      wndclass.style         = NULL;      // style de la fenêtre

      • Vérifie que tu compiles bien en C et non en C++ (extension .c et non .cpp ni .C)
      • Remplace NULL par 0. Le champ .style n'est pas un pointeur mais un entier...

      Sinon, ce code fonctionne correctement et il n'est pas mal écrit (jusque là, pas de globale, c'est OK).

      • Partager sur Facebook
      • Partager sur Twitter
      Music only !
        17 juin 2006 à 13:20:11

        nn dsl, je lé bien mis en .c

        Toujours la meme erreur au NULL :

        -[Warning] assignment makes integer from pointer without a cast
        -ld returned 1 exit status

        J'ai mi un 0 à la place d'un NULL, sa compile sans erreur mais rien ne s'affiche
        • Partager sur Facebook
        • Partager sur Twitter
          17 juin 2006 à 13:42:18

          Citation : el diablo 7

          J'ai mi un 0 à la place d'un NULL, sa compile sans erreur mais rien ne s'affiche


          Aucun problème avec Code::Blocks. Tu as bien crée un programe GUI et non Console ?
          • Partager sur Facebook
          • Partager sur Twitter
          Music only !

          problème avec l'API Win32

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown