Autor Thema: Fensterereignis WM_ARROWED doppelt?  (Gelesen 2196 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline Count

  • Benutzer
  • Beiträge: 226
Fensterereignis WM_ARROWED doppelt?
« 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;
}

Offline czietz

  • Benutzer
  • Beiträge: 3.537
Re: Fensterereignis WM_ARROWED doppelt?
« Antwort #1 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
« Letzte Änderung: Fr 17.02.2023, 17:35:57 von czietz »

Offline Count

  • Benutzer
  • Beiträge: 226
Re: Fensterereignis WM_ARROWED doppelt?
« Antwort #2 am: Fr 17.02.2023, 17:44:30 »
Tatsächlich, das wars!  :D
Vielen Dank für die schnelle Hilfe.