我有一个小程序,应该检查是否有单击并获取单击的坐标。第一次可以使用,但是当我第二次调用时,它甚至都不允许我再次单击...为什么?怎么了?
我尝试了所有操作,将鼠标设置放在了过程之外,没有任何区别。 另外,我尝试创建一种小的东西,单击一次,将cx放入si并再次调用sam click check,然后将si和新的cx进行比较,结果有所不同(si在开始时为0,所以没有垃圾),但是在实际屏幕上,我只能单击一次,然后才能跳到比较部分。
IDEAL
MODEL small
STACK 100h
DATASEG
a11 db ?
a12 db ?
b1 db ?
a21 db ?
a22 db ?
b2 db ?
CODESEG
;---------------------------------------------------------
;find color from click of mouse
;---------------------------------------------------------
proc line ;vertical line
mov si,5d
mov bh,0h
startagain: ;;print another pixel
mov ah,0ch
int 10h
inc dx
dec si
cmp si,0
jnz startagain
ret
endp line
;---------------------------------------------------------
proc box1 ; make box 1/7-number 0
mov cx,8
mov dx,8
mov al,4
call line
mov di,10d
here:
;make a box
mov cx,8
mov dx,8
inc cx
call line
dec di
cmp di,0
jnz here
ret
endp box1
;---------------------------------------------------------
proc box2 ; make box 1/7-number 0
mov cx,20
mov dx,20
mov al,8
call line
mov di,10d
here1:
;make a box
mov cx,8
mov dx,8
inc cx
call line
dec di
cmp di,0
jnz here1
ret
endp box2
;---------------------------------------------------------
PROC LeftButtonClick
mov ax, 0000h ; reset mouse
int 33h
cmp ax,0FFFFh
jne NoMouse
mov ax, 0001h ; show mouse
int 33h
MouseLP: ; till cx= x of click & dx= y
mov ax, 0003h ; get mouse position and buttonstatus
int 33h
cmp bx, 1 ; check left mouse click
jne MouseLP ; Loop until mouse click
shr cx,1
dec dx
call findcolor
NoMouse:
ret
ENDP LeftButtonClick
;---------------------------------------------------------
proc findcolor
add dl,'0'
mov ah,02
int 21
ret
endp findcolor
;---------------------------------------------------------
start:
mov ax, @data
mov ds, ax
; Graphic mode
mov ax, 13h
int 10h
call box1
call box2
call LeftButtonClick
xor bx,bx
call LeftButtonClick
; Wait for key press
mov ah,00h
int 16h
; Return to text mode
mov ah, 0
mov al, 2
int 10h
exit:
mov ax, 4c00h
int 21h
END start
在主程序中,我需要对显示在屏幕上的框进行6次不同的单击,然后从每次单击的坐标中找出框的颜色。为什么我只能在屏幕上单击一次??