amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Beispiel aus Autodocs zu alt? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

30.05.2005, 21:25 Uhr

Reth
Posts: 1858
Nutzer
Hallo zusammen,

hab mir aus den Autodocs Intuition ein Beispiel übernommen, wie man ein Fenster korrekt schließt.
Bei mir friert dann der ganze Rechner ein. Das Fenster wird mit Defaultwerten geöffnet (wenn gewünscht, kann ich die Werte noch nachreichen - bin grad nicht an meinem Rechner), ohne Angabe eines Screens.

Was stimmt an der Schließfunktion nicht (mehr)? Verwende OS3.9.

Hier mal der Codeausschnitt:

EXAMPLE
/* CloseWindowSafely */

/* these functions close an Intuition window
* that shares a port with other Intuition
* windows or IPC customers.
*
* We are careful to set the UserPort to
* null before closing, and to free
* any messages that it might have been
* sent.
*/
#include "exec/types.h"
#include "exec/nodes.h"
#include "exec/lists.h"
#include "exec/ports.h"
#include "intuition/intuition.h"

CloseWindowSafely( win )
struct Window *win;
{
/* we forbid here to keep out of race conditions with Intuition */
Forbid();

/* send back any messages for this window
* that have not yet been processed
*/
StripIntuiMessages( win-]UserPort, win );

/* clear UserPort so Intuition will not free it */
win-]UserPort = NULL;

/* tell Intuition to stop sending more messages */
ModifyIDCMP( win, 0L );

/* turn multitasking back on */
Permit();

/* and really close the window */
CloseWindow( win );
}

/* remove and reply all IntuiMessages on a port that
* have been sent to a particular window
* (note that we don't rely on the ln_Succ pointer
* of a message after we have replied it)
*/
StripIntuiMessages( mp, win )
struct MsgPort *mp;
struct Window *win;
{
struct IntuiMessage *msg;
struct Node *succ;

msg = (struct IntuiMessage *) mp-]mp_MsgList.lh_Head;

while( succ = msg-]ExecMessage.mn_Node.ln_Succ ) {

if( msg-]IDCMPWindow == win ) {

/* Intuition is about to free this message.
* Make sure that we have politely sent it back.
*/
Remove( msg );

ReplyMsg( msg );
}

msg = (struct IntuiMessage *) succ;
}
}

[ - Antworten - Zitieren - Direktlink - ]

30.05.2005, 21:49 Uhr

Holger
Posts: 8116
Nutzer
Das ist ein ganz spezielles Beispiel für den Fall, daß man mehrere Fenster mit einem gemeinsam genutzten IDCMP-Port benutzt. Man sollte Fenster nur dann auf diese Weise schließen, wenn man sie auch mit dem entsprechenden dazugehörigen Code geöffnet hat.
Ansonsten lautet die korrekte Weise, ein Fenster zu schließen:

CloseWindow(wptr);

mfg
--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

30.05.2005, 22:16 Uhr

Reth
Posts: 1858
Nutzer
Danke schön!

Auf den Code bin ich auch "umgestiegen". Das tat dann auch.
Das mit den mehreren Fenstern auf demselben Port hab ich wohl übersehen!

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Beispiel aus Autodocs zu alt? [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1998-2024 by amiga-news.de - alle Rechte vorbehalten.
.