Problème de création de menu en C

Forum Amiga Coding Problème de création de menu en C

  • Ce sujet contient 10 réponses, 4 participants et a été mis à jour pour la dernière fois par HarrisonLee, le il y a 3 semaines.
  • Créateur
    Sujet
  • #188463
    stephbb75
      • Level 11
      • Messages : 1491

      Salut,

      Je me remet au C sur Amiga (après heuuu très longtemps !)

      Et je suis bloqué depuis 2 jours sur un trucs un peut con !
      (Pour info j’utilise StromC4 et compile en GCC)

      C’est la création de menu, voici le code que j’ai fait :

      #define IDM_EXIT 100
      struct Menu *menu;
      
      /* Menu Definitions */
      
      static struct NewMenu Menu[] =
      {
      {NM_TITLE,"Fichier", 0 , 0, 0, 0, },
      { NM_ITEM,"&Quitter", 0, 0, 0, ( APTR ) IDM_EXIT,},
      {NM_END, 0, 0 , 0, 0, 0, },
      };
      
      struct Screen *myScr;
      struct Window *myWin;
      static const UWORD pens[] = {~0};
      
      ...
      
      // ouverture de l'écran
      
      myScrCPC = OpenScreenTags (NULL,
      SA_Title, "Titre",
      SA_DisplayID, modeID,
      SA_Depth, depthScreen,
      SA_Pens, pens,
      SA_ErrorCode, &error,
      TAG_END);
      
      ...
      // j'ai pas mis le code de test ci cela ne fonctionne pas !
      
      if ( myWin = OpenWindowTags (NULL,
      WA_Title, 0,
      WA_CustomScreen, myScr,
      WA_Flags, WFLG_ACTIVATE | WFLG_NOCAREREFRESH | WFLG_BACKDROP | WFLG_BORDERLESS,
      WA_IDCMP, IDCMP_RAWKEY | IDCMP_ACTIVEWINDOW | IDCMP_INACTIVEWINDOW | IDCMP_REFRESHWINDOW,
      WA_Left, 0,
      WA_Top, 0,
      WA_Width, widthScreen,
      WA_Height, heightScreen,
      TAG_END))
      {
      
      if ( !( menu = CreateMenus( Menu, TAG_END ) ) )
      {
      return( -2 );
      }
      
      SetMenuStrip( myWin, menu );
      }
      
      ...
      
      

      En fait l’Amiga plante (mais alors bien un gros boummmm :lol: ) à la ligne :

      if ( !( menu = CreateMenus( Menu, TAG_END ) ) )

      Même sans le IF cela plate.

      Je pige pas ce que j’ai fait de mal ou que je n’ai pas fait :scratch:

       

       

      https://youtube.com/@stephbb75

    Affichage de 10 réponses de 1 à 10 (sur un total de 10)

    Partager sur vos réseaux sociaux préférés :
    Facebooktwitterredditpinterestlinkedintumblrmail

    • Auteur
      Réponses
    • #188476
      hitchhikr
        • Level 2
        • Messages : 31

        Tu as ouvert la gadtools.library ?

        Pas oublier LayoutMenus avant SetMenuStrip et GT_RefreshWindow après aussi.



        #188491
        nothing
          • Level 6
          • Messages : 324

          Salut,

          Ce serait pas plutot un truc du style : IGadTools->CreateMenus(menu, TAG_END) ?

          cf exemple : https://wiki.amigaos.net/wiki/GadTools_Menus

          #188492
          stephbb75
            • Level 11
            • Messages : 1491

            Salut,

            Ce serait pas plutot un truc du style : IGadTools->CreateMenus(menu, TAG_END) ?

            C’est pour l’OS 4 se type de façon de faire ;-)

             

            https://youtube.com/@stephbb75

            #188493
            stephbb75
              • Level 11
              • Messages : 1491

              Salut,

              Tu as ouvert la gadtools.library ?

              Bas oui :unsure:

              Pas oublier LayoutMenus avant SetMenuStrip et GT_RefreshWindow après aussi.

              Oui, mais bon la j’y arrive même pas (je l’ai oublier en copient mon code ;-):wacko:

              https://youtube.com/@stephbb75

              #188495
              nothing
                • Level 6
                • Messages : 324

                Ah oui évidemment ça ressemble plus à du c++. Trop longtemps que j ai fait du dev sur Amiga…

                #188497
                stephbb75
                  • Level 11
                  • Messages : 1491

                  Pas que, c’est surtout que pour l’OS4 ils on changer quelques truc ;-)

                  Moi aussi cela fait longtemps, j’ai oublier pleins de truc :wacko:

                  https://youtube.com/@stephbb75

                  #188509
                  hitchhikr
                    • Level 2
                    • Messages : 31

                    Montre le code complet, pas juste un morceau.

                    #188518
                    stephbb75
                      • Level 11
                      • Messages : 1491

                      Le code complet cela va faire beaucoup ;-)

                      BOOL openMyScreen()
                      {
                      static const UWORD pens[] = {~0};
                      ULONG error;
                      
                      myScr = OpenScreenTags (NULL,
                      SA_Title, "Screen",
                      SA_DisplayID, modeID,
                      SA_Depth, depthScreen,
                      SA_Pens, pens,
                      SA_ErrorCode, &error,
                      TAG_END);
                      
                      if (!myScr)
                      {
                      Log( "cannot open screen; error code = %lu",error, LOG_ERROR);
                      return FALSE;
                      }
                      
                      return TRUE;
                      }
                      
                      BOOL openWin()
                      {
                      // ouverture de la fenétre
                      if ( myWin = OpenWindowTags (NULL,
                      WA_Title, 0,
                      WA_CustomScreen, myScr,
                      WA_Flags, WFLG_ACTIVATE | WFLG_NOCAREREFRESH | WFLG_BACKDROP | WFLG_BORDERLESS | WFLG_RMBTRAP,
                      WA_IDCMP, IDCMP_RAWKEY | IDCMP_ACTIVEWINDOW | IDCMP_INACTIVEWINDOW | IDCMP_REFRESHWINDOW,
                      WA_Left, 0,
                      WA_Top, 0,
                      WA_Width, widthScreen,
                      WA_Height, heightScreen,
                      TAG_END))
                      {
                      
                      //Ajout des menus
                      // POURQUOI CELA PLANTE !!!!!!
                      //menu = CreateMenusA( myMenu, TAG_END );
                      //if ( !( menu = CreateMenus( myMenu, TAG_END ) ) )
                      //{
                      // Log(MODULENAME, "Menus non creer", LOG_ERROR);
                      // return( -2 );
                      //}
                      
                      //SetMenuStrip( myWin, menu );
                      
                      return TRUE;
                      }
                      
                      return FALSE;
                      }
                      
                      main()
                      ...
                      if ( openMyScreen() )
                      {
                      if ( openWin() )
                      {
                      Wmask = (1 << myWin->UserPort->mp_SigBit);
                      
                      while( ! finMain )
                      {
                      /* Check for and handle any IntuiMessages */
                      sigs = Wait ( Wmask | Tmask );
                      
                      if ( sigs & Wmask )
                      {
                      while( (! finMain) && ( imsg = (struct IntuiMessage *)GetMsg(userport)) )
                      {
                      iclass = imsg->Class;
                      code = imsg->Code;
                      
                      //ReplyMsg( imsg->ExecMessage );
                      ReplyMsg((struct Message *)imsg);
                      
                      ...
                      ICI mon code qui fonctionne (fonctionnais !)
                      ...
                      }
                      else
                      {
                      Log( "Erreur ouverture fenêtre", LOG_ERROR );
                      closeMyScreen();
                      }
                      }
                      else
                      {
                      Log( "Erreur ouverture ecran", LOG_ERROR );
                      closeMyScreen();
                      }
                      }
                      ...
                      
                      

                      En plus que cela plante quand je tente de mettre le menu …

                      MAINTENANT cela plante au OpenScreenTags :rant: :wacko: :wacko:

                      https://youtube.com/@stephbb75

                      #188520
                      hitchhikr
                        • Level 2
                        • Messages : 31

                        L’exécutable alors.

                        #194337
                        HarrisonLee
                          • Level 0 - Newbie
                          • Messages : 4

                          It looks like the issue might be with how the menu structure is defined or passed to CreateMenus(). Double-check the NewMenu fields and ensure everything is properly initialized. You could also try simplifying the menu or adding debug prints to narrow down the cause of the crash.

                        Partager sur vos réseaux sociaux préférés :
                        Facebooktwitterredditpinterestlinkedintumblrmail
                        Affichage de 10 réponses de 1 à 10 (sur un total de 10)
                        • Vous devez être connecté pour répondre à ce sujet.