• Yokemate of Keyboards
    Yokemate of Keyboards
    Papiosaur
    Posts: 2294 from 2003/4/10
    From: France
    @igracki: you have right... i will propose a new code...

    Code:
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <proto/exec.h>
    #include <proto/intuition.h>
    #include <proto/muimaster.h>
    #include <proto/utility.h>
    #include <proto/graphics.h>
    #include <proto/dos.h>
    #include <libraries/mui.h>
    #include <clib/alib_protos.h>

    #define MAKE_ID(a,b,c,d) ((ULONG) (a)<<24 | (ULONG) (b)<<16 | (ULONG) (c)<<8 | (ULONG) (d))

    struct Library *MUIMasterBase;
    struct Library *UtilityBase;
    struct IntuitionBase *IntuitionBase;
    struct GfxBase *GfxBase;

    BOOL Open_Libs(void);
    void Close_Libs(void);
    void ShowAboutMUI(void);

    Object *app, *window, *aboutwin;

    int main(void)
    {
    Object *menu;
    Object *menuItemQuit, *menuItemAbout;

    BOOL running = TRUE;
    ULONG signals;

    if (!Open_Libs()) {
    printf("Failed to open librariesn");
    return 20;
    }

    app = ApplicationObject,
    MUIA_Application_Title, "Simple MUI App",
    MUIA_Application_Version, "$VER: SimpleMUIApp 1.0 (09.09.24)",
    MUIA_Application_Copyright, "©2024 Your Name",
    MUIA_Application_Author, "Your Name",
    MUIA_Application_Description, "Simple MUI application with About",
    MUIA_Application_Base, "SIMPLEMUIAPP",

    SubWindow, window = WindowObject,
    MUIA_Window_Title, "Simple MUI Window",
    MUIA_Window_ID, MAKE_ID('S','I','M','P'),
    MUIA_Window_Width, 400,
    MUIA_Window_Height, 300,
    WindowContents, VGroup,
    // La fenêtre est vide, sans contenu
    End,
    End,

    MUIA_Application_Menustrip, menu = MenustripObject,
    Child, MenuObject,
    MUIA_Menu_Title, "File",
    Child, menuItemAbout = MenuitemObject,
    MUIA_Menuitem_Title, "About MUI...",
    End,
    Child, menuItemQuit = MenuitemObject,
    MUIA_Menuitem_Title, "Quit",
    End,
    End,
    End,
    End;

    if (!app) {
    printf("Failed to create applicationn");
    Close_Libs();
    return 20;
    }

    DoMethod(window, MUIM_Notify, MUIA_Window_CloseRequest, TRUE,
    app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);
    DoMethod(menuItemQuit, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
    app, 2, MUIM_Application_ReturnID, MUIV_Application_ReturnID_Quit);

    DoMethod(menuItemAbout, MUIM_Notify, MUIA_Menuitem_Trigger, MUIV_EveryTime,
    app, 2, MUIM_Application_ReturnID, 1);

    set(window, MUIA_Window_Open, TRUE);

    while (running) {
    ULONG id = DoMethod(app, MUIM_Application_Input, &signals);

    switch(id) {
    case MUIV_Application_ReturnID_Quit:
    if (MUI_RequestA(app, window, 0, "Quit?", "_Yes|_No", "33cAre you sure?", NULL) == 1)
    running = FALSE;
    break;
    case 1: // About
    ShowAboutMUI();
    break;
    }

    if (running && signals) Wait(signals);
    }

    set(window, MUIA_Window_Open, FALSE);

    MUI_DisposeObject(app);
    Close_Libs();
    return 0;
    }

    void ShowAboutMUI(void)
    {
    if (!aboutwin)
    {
    aboutwin = AboutmuiObject,
    MUIA_Window_RefWindow, window,
    MUIA_Aboutmui_Application, app,
    End;
    }

    if (aboutwin)
    set(aboutwin, MUIA_Window_Open, TRUE);
    else
    DisplayBeep(NULL);
    }

    BOOL Open_Libs(void)
    {
    if (!(IntuitionBase = (struct IntuitionBase *)OpenLibrary("intuition.library", 39))) return FALSE;
    if (!(GfxBase = (struct GfxBase *)OpenLibrary("graphics.library", 39))) { CloseLibrary((struct Library *)IntuitionBase); return FALSE; }
    if (!(UtilityBase = OpenLibrary("utility.library", 39))) { CloseLibrary((struct Library *)GfxBase); CloseLibrary((struct Library *)IntuitionBase); return FALSE; }
    if (!(MUIMasterBase = OpenLibrary(MUIMASTER_NAME, 19))) { CloseLibrary(UtilityBase); CloseLibrary((struct Library *)GfxBase); CloseLibrary((struct Library *)IntuitionBase); return FALSE; }
    return TRUE;
    }

    void Close_Libs(void)
    {
    if (MUIMasterBase) CloseLibrary(MUIMasterBase);
    if (UtilityBase) CloseLibrary(UtilityBase);
    if (GfxBase) CloseLibrary((struct Library *)GfxBase);
    if (IntuitionBase) CloseLibrary((struct Library *)IntuitionBase);
    }


    This one is better ;-)
  • »09.09.24 - 10:17
    Profile Visit Website