I would like to know if it is possible to figure out if my mouse cursor is outside of a graphic region (%gr).
The callback of %gr is always recognized when the mouse curser is in the graphic region. How can I recognize if my mouse cursor is outside of a given graphic region?
I tried this with GET_MOUSE_INFO@ but this method is imprecise because it depends on how fast the mouse is moved out of the graphic area. The position x,y of GET_MOUSE_INFO is still in the graphic area although the current mouse cursur position is outside.
PROGRAM TEST
C
include <windows.ins>
C
INTEGER ctrl,hnd1,f_test
DATA hnd1 /1/
external f_test
C
c
i=winio@(
* '%`^gr[rgb_colours,black,full_mouse_input]&',
* 400L,400L,hnd1,f_test)
i=winio@('%ff%^bt[test]&',f_test)
i=winio@('%ww%lw',ctrl)
i=select_graphics_object@(hnd1)
CALL draw_line_between@(100,100,300,200,RGB@(0,0,255))
C
END
function f_test
C
include <windows.ins>
C
integer*4 f_test,x,y,f
integer*4 idum1,idum2,idum3,idum4,idum5,idum6,idum7,idum8
CHARACTER*256 CDUM
LOGICAL*2 LOGGRA
C
CDUM=CLEARWIN_STRING@('CALLBACK_REASON')
IDUM1=CLEARWIN_INFO@( 'CALL_BACK_WINDOW' )
IDUM2=CLEARWIN_INFO@( 'CURSOR_WINDOW' )
IDUM3=CLEARWIN_INFO@( 'FOCUS_WINDOW' )
IDUM4=CLEARWIN_INFO@( 'GRAPHICS_HDC' )
idum5=CLEARWIN_INFO@( 'LATEST_WINDOW' )
idum6=CLEARWIN_INFO@( 'LOSING_FOCUS' )
idum7=CLEARWIN_INFO@( 'GRAPHICS_MOUSE_X' )
idum8=CLEARWIN_INFO@( 'GRAPHICS_MOUSE_Y' )
C
LOGGRA=.TRUE.
C
CALL GET_MOUSE_INFO@(X,Y,F)
if(X.LE.1) LOGGRA=.FALSE.
if(Y.LE.1) LOGGRA=.FALSE.
if(X.GE.399) LOGGRA=.FALSE.
if(Y.GE.399) LOGGRA=.FALSE.
if(idum3.eq.0) LOGGRA=.FALSE.
C
C write(*,*) CDUM(1:12),x,y,f,idum1,idum2,idum3,idum4,idum5,idum6
write(*,*) LOGGRA,idum1,idum2,idum3,idum4,idum5,idum6,idum7,idum8
f_test=2
end
C