Morning all,

I've written a small demo program to show the things that happen when an
application sub-window is hit in a PE program. The program has a window
containing a single application sub-window.

The hit routine does nothing more than this:

ahit0   movem.l d1/d3/d5-d7/a0/a4,-(a7) ; Save the workers
        moveq #0,d1               ; D1.W = Application sub window number
        moveq #0,d2               ; D2.W = Ink colour
;                                   A4 already set to Working definition
        jsr wm_swapp(a2)          ; Set channel id (A0) to the subwindow

        movem.l a1-a2,-(a7)       ; A1 gets corrupted
        lea hit,a1                ; Text string to print
        move.w ut_mtext,a2        ; Print string vector
        jsr (a2)                  ; Print the message

        lea hitter,a1             ; Hit counter location
        move.w (a1),d1            ; Hit counter value
        addq.w #1,d1              ; Increment counter
        move.w d1,(a1)            ; Save counter
        move.w ut_mint,a2         ; Print integer vector
        jsr (a2)                  ; Print it

        movem.l (a7)+,a1-a2       ; Restore

        movem.l (a7)+,d1/d3/d5-d7/a0/a4 ; Restore the workers
        moveq #0,d0               ; No errors
        rts

; Strings and things go here

hitter  dc.w 0                    ; How many times have I been hit?

hit     dc.w hit_e-hit-2          ; Hit message
        dc.b 'HIT: '
hit_e   equ *

Now, when run I notice the following "foibles":

1. The hit code is called when the pointer enters the sub-window, and
each time it moves within the sub-window.

2. Pressing the TAB key, which activates the sub-window, the counter
increases by TWO and not one.

3. Pressing the F1 key also increases the count by two.

4. Other keys, I have not tested everything, increment the counter by one.

There are no menus or anything in the sub-window, it is used simply as a
display area by the program, aub-window menus come in a later article!

Another question, I only have a single sub-window. If I comment out the
call to WM_SWAPP in the hit routine, I still see my output in the
sub-window, but it is not cleared before hand. (I can live with this)
but when I was writing PE stuff using SuperBasic and EasyPTR 3, I always
had to set the channel to the sub-window (or info window or whatever)
before I could write to it.

So, My further queries are:

1. Do I need to call WM_SWAPP if I only have one sub-window or can I
assume that the channel id always refers to the sub-window regardless
unless I explicitly set it to a loose item or whatever?

2. If I have two or more sub-windows, does the channel id, by default,
point at the first - I haven't tested this yet - If I don't call WM_SWAPP?

Thanks.

PS. The above has been noticed running on QPC under Wine on Linux. I'm
attempting to run it under Windows (in an emulator) to see what happens
there!

-- 
Norman Dunbar
Dunbar IT Consultants Ltd

Registered address:
Thorpe House
61 Richardshaw Lane
Pudsey
West Yorkshire
United Kingdom
LS28 7EL

Company Number: 05132767
_______________________________________________
QL-Users Mailing List
http://www.q-v-d.demon.co.uk/smsqe.htm

Reply via email to