App-Window in MUI

Ihr habt ein Problem mit C++ oder anderen Sprachen ? Dann seit Ihr in diesem Forum genau richtig! Hier können alle Fragen gestellt werden, die mit Programmierung (MorphOS, Linux, BeOS, BSD,...) zu tun haben.

Moderatoren: analogkid, roschmyr

Benutzeravatar
pegasossigi2
Romanverfasser
Romanverfasser
Beiträge: 695
Registriert: 09 Aug 2007, 13:16

App-Window in MUI

Beitragvon pegasossigi2 » 09 Mai 2010, 12:48

Wie kann ich ein App-Window für ein MUI4-Fenster programieren ?

Ich habe mir mal das Beispiel "AppWindow.c" aus dem Dev-Archiv von
MUI38-dev rausgesucht, aber es läßt sich nicht unter MOS 2.4 compilieren. Und wenn ich den Code in eines meiner funktionierenden Programme übernehme, erscheind nach jedem Versuch ein Icon auf des Fenster fallen zu lassen der Logserver mit der Fehlermeldung "printf...".
Warum erscheind solch eine Fehlermeldung im Logserver?

Benutzeravatar
Kronos
Moderator
Moderator
Beiträge: 719
Registriert: 07 Sep 2003, 01:10
Wohnort: Hagen

Beitragvon Kronos » 09 Mai 2010, 13:00

/me schaut mal in seine CrappleWare ....
win = WindowObject ......
MUIA_Window_AppWindow, TRUE ......


DoMethod(win,MUIM_Notify,MUIA_AppMessage,MUIV_EveryTime,some_obj, some_method_of_that_object,MUIV_TriggerValue);


Mehr brauchst da nicht :wink:
!! Bin Wichtig !!

Benutzeravatar
pegasossigi2
Romanverfasser
Romanverfasser
Beiträge: 695
Registriert: 09 Aug 2007, 13:16

Beitragvon pegasossigi2 » 09 Mai 2010, 13:48

Kronos hat geschrieben:/me schaut mal in seine CrappleWare ....
win = WindowObject ......
MUIA_Window_AppWindow, TRUE ......


DoMethod(win,MUIM_Notify,MUIA_AppMessage,MUIV_EveryTime,some_obj, some_method_of_that_object,MUIV_TriggerValue);


Mehr brauchst da nicht :wink:



Ist ja schön und gut, nur ich brauche ja den Pfad des fallen gelassenen Icons. Nutze ich einen Hook nach MUI 38 Manier um den Pad zu holen, schmiert mir
das Programm ab (mit der Fehlermeldung).

Benutzeravatar
Kronos
Moderator
Moderator
Beiträge: 719
Registriert: 07 Sep 2003, 01:10
Wohnort: Hagen

Beitragvon Kronos » 09 Mai 2010, 14:21

Das Attribute AppMessage ist sinnigerweise auch ein struct AppMessage, wenn du das wie ich mit MUIV_TriggerValue an eine Methode weitergeben lässt erhälts du dort als Msg eine Struktur im Format:

struct MUIP_AppMsg
{
ULONG MethodID;
struct AppMessage *am;
};

(o.k. ist jetzt ein bissle durchs Knie geschossen :roll: )

Alternativ mit GetAttr() holen.

struct AppMessage enthält einen Pointer auf struct WBArg (am_ArgList).

Ein struct WBArg enthält einen Dos-Lock auf den Pfad sowie den Dateinamen als String.

Mit NameFromLock(); erhälts du nun den Pfad als String.

Nur Vorsicht, endet der Pfad auf ":" so ist das ":" auch mit drin, wenn nicht endet es ohne "/". Musst das also noch überprüfen wenn du das mit dem Dateinamen (der übrigens ohne ".info" daher kommt) zusammensetzen willst.
!! Bin Wichtig !!

Benutzeravatar
geit
Seniormember
Seniormember
Beiträge: 857
Registriert: 30 Mär 2006, 12:17
Wohnort: 48477 Hörstel
Kontaktdaten:

Beitragvon geit » 09 Mai 2010, 15:23

Kronos hat geschrieben:Nur Vorsicht, endet der Pfad auf ":" so ist das ":" auch mit drin, wenn nicht endet es ohne "/". Musst das also noch überprüfen wenn du das mit dem Dateinamen (der übrigens ohne ".info" daher kommt) zusammensetzen willst.


Dafür hat der liebe Codergott, AddPart() erfunden. Selbst sollte man nie sowas basteln und schon gar nicht mit strcat() oder so.

Geit

Benutzeravatar
Kronos
Moderator
Moderator
Beiträge: 719
Registriert: 07 Sep 2003, 01:10
Wohnort: Hagen

Beitragvon Kronos » 09 Mai 2010, 15:28

Tja, auch nach 20 Jahren gibts immer noch was "neues" zu finden :oops: :roll:
!! Bin Wichtig !!

Benutzeravatar
igracki
Articia-Verehrer
Articia-Verehrer
Beiträge: 164
Registriert: 16 Sep 2003, 13:02
Wohnort: Berlin
Kontaktdaten:

Beitragvon igracki » 09 Mai 2010, 17:21

Und falls du mehrere Icons bearbeiten willst, kannst du das hier verwenden:

Code: Alles auswählen

    struct MP_WinMain_AppMessage *m = (APTR)msg;
    struct AppMessage            *am = m->appMsg;
    struct WBArg                 *ap;
    long                            i;
    char                         file[1024];
 
    for (ap = am->am_ArgList, i = 0; i < am->am_NumArgs; i++, ap++)
    {
        NameFromLock(ap->wa_Lock, file, sizeof(file));
        AddPart(file, ap->wa_Name, sizeof(file));

        ...

    }
Bye, Thomas!

Benutzeravatar
pegasossigi2
Romanverfasser
Romanverfasser
Beiträge: 695
Registriert: 09 Aug 2007, 13:16

Beitragvon pegasossigi2 » 09 Mai 2010, 17:29

igracki hat geschrieben:Und falls du mehrere Icons bearbeiten willst, kannst du das hier verwenden:

Code: Alles auswählen

    struct MP_WinMain_AppMessage *m = (APTR)msg;
    struct AppMessage            *am = m->appMsg;
    struct WBArg                 *ap;
    long                            i;
    char                         file[1024];
 
    for (ap = am->am_ArgList, i = 0; i < am->am_NumArgs; i++, ap++)
    {
        NameFromLock(ap->wa_Lock, file, sizeof(file));
        AddPart(file, ap->wa_Name, sizeof(file));

        ...

    }


Das muß doch sicher in so'n Hook ?

Nur leider funktioniert bei mir nicht mal der Einsprung den den MUIHook. Bei mir kommt es immer zum Absturtz.
Ich habe bisher versucht nach dem Muster von AppWindow.c
zu arbeiten.

Benutzeravatar
igracki
Articia-Verehrer
Articia-Verehrer
Beiträge: 164
Registriert: 16 Sep 2003, 13:02
Wohnort: Berlin
Kontaktdaten:

Beitragvon igracki » 09 Mai 2010, 20:48

nein, muß nicht, kann aber;)

Aber eine eigene Methode, die vom Dispatcher aufgerufen wird, ist besser als ein Hook, weil man da Zugriff auf die InstData hat, z.B.

Für eigene Methoden brauchst du eine eigene SubClass.

Benutzt du für den Hook das MHOOK Makro?
Bye, Thomas!

Benutzeravatar
pegasossigi2
Romanverfasser
Romanverfasser
Beiträge: 695
Registriert: 09 Aug 2007, 13:16

Beitragvon pegasossigi2 » 09 Mai 2010, 21:06

igracki hat geschrieben:nein, muß nicht, kann aber;)

Aber eine eigene Methode, die vom Dispatcher aufgerufen wird, ist besser als ein Hook, weil man da Zugriff auf die InstData hat, z.B.

Für eigene Methoden brauchst du eine eigene SubClass.

Benutzt du für den Hook das MHOOK Makro?


Nein

Benutzeravatar
igracki
Articia-Verehrer
Articia-Verehrer
Beiträge: 164
Registriert: 16 Sep 2003, 13:02
Wohnort: Berlin
Kontaktdaten:

Beitragvon igracki » 09 Mai 2010, 21:18

Ich hänge das mal hier an, sollte aber auch in aminet oder Ambient source zu finden sein.

Es gibt auch von itix (glaube ich) einen Beispiel source im aminet (?) um eigene MUI SubKlassen zu erstellen mit eigenen Methoden usw, weiß nur leider nicht mehr wie der genau hieß, irgendwas mit Calculator...
Der ist aktueller als die Beispiele von MUI3.8
Dateianhänge
M_HOOK.lha
(600 Bytes) 117-mal heruntergeladen
Bye, Thomas!

Benutzeravatar
pegasossigi2
Romanverfasser
Romanverfasser
Beiträge: 695
Registriert: 09 Aug 2007, 13:16

Beitragvon pegasossigi2 » 09 Mai 2010, 21:40

igracki hat geschrieben:Ich hänge das mal hier an, sollte aber auch in aminet oder Ambient source zu finden sein.

Es gibt auch von itix (glaube ich) einen Beispiel source im aminet (?) um eigene MUI SubKlassen zu erstellen mit eigenen Methoden usw, weiß nur leider nicht mehr wie der genau hieß, irgendwas mit Calculator...
Der ist aktueller als die Beispiele von MUI3.8


werde ich mal morgen durchschauen, danke !


Zurück zu „Code-Küche“



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste