atari-home.de - Foren

Software => Coding => Thema gestartet von: Count am Fr 17.02.2023, 16:50:12

Titel: Fensterereignis WM_ARROWED doppelt?
Beitrag von: Count am Fr 17.02.2023, 16:50:12
Hallo zusammen,

ich beobachte gerade ein merkwürdiges Verhalten, das aber vielleicht normal ist. Und zwar wird das WM_ARROWED-Ereignis zweimal ausgelöst, wenn ich auf einen Scrollbalken oder -pfeil klicke.

Zuerst dachte ich, ich hätte einen Fehler in meinem Programm. Aber ein kleines Testprogramm mit nur dem nötigsten zeigt dieses Verhalten ebenfalls. Getestet habe ich es mit Aranym, STeeM und auf einem Mega STE.

Irgendwie stehe ich auf dem Schlauch.  :(

#include <gem.h>

#define loword(x)  (short)((unsigned long)(x) & 0xffffUL)
#define hiword(x)  (short)((unsigned long)(x) >> 16)

int main()
{
    const char* title = " TEST ";
    short work_in[] = { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2 };
    short work_out[57];
    short vdihdl, win;
    short dummy;

    appl_init();
    vdihdl = graf_handle(&dummy, &dummy, &dummy, &dummy);
    v_opnvwk(work_in, &vdihdl, work_out);

    win = wind_create(CLOSER | NAME | UPARROW | DNARROW | VSLIDE, 0, 0, 300, 150);
    wind_set(win, WF_NAME, hiword(title), loword(title), 0, 0);

    wind_open(win, 30, 50, 150, 100);

    graf_mouse(ARROW, 0L);

    for (;;) {
        short mx, my, mk;
        short kstat, key;
        short evntret;
        short msg[8];

        evntret = evnt_multi(MU_MESAG | MU_TIMER | MU_KEYBD | MU_BUTTON,
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, msg, 100,
                             &mx, &my, &mk, &kstat, &key, 0L
                            );

        if ((evntret & MU_MESAG) != 0) {
            if (msg[0] == WM_CLOSED) {
                break;
            } else if (msg[0] == WM_ARROWED) {
                form_alert(1, "[1][ WM_ARROWED ][ OK ]");
            }
        }
    }

    wind_close(win);
    wind_delete(win);

    v_clsvwk(vdihdl);
    appl_exit();

    return 0;
}
Titel: Re: Fensterereignis WM_ARROWED doppelt?
Beitrag von: czietz am Fr 17.02.2023, 17:33:07
Das klingt doch verdächtig nach dem Problem, für das einst ARROWFIX entwickelt wurde: http://atariftp.czietz.de/pub/atari/Utils/arrfix15.lzh.

Dessen Anleitung enthält auch einen Workaround, den man in seinen Programmen alternativ anwenden kann.

Zitat
     - das Doppelscrollproblem kann man leicht vermeiden, wenn man
       in seinem evnt_multi()-Aufruf immer auch auf einen Doppel-
       klick wartet:  z.B. evnt_multi( MU_BUTTON|..., 2, 1, 1, ...);

EDIT: Mit EmuTOS wäre das nicht passiert.  :D
Titel: Re: Fensterereignis WM_ARROWED doppelt?
Beitrag von: Count am Fr 17.02.2023, 17:44:30
Tatsächlich, das wars!  :D
Vielen Dank für die schnelle Hilfe.