在我的代码上,我必须检查是否在图像上按下了鼠标。 当我调试代码时,我看到中断一遍又一遍地返回相同的信息 mikoon是图片打印的起点(16 * 16)
private static int _k = 10;
public static int k
{
get { Console.WriteLine($"evaluating k ({_k})"); return _k; }
set { Console.WriteLine($"{value} assigned to k"); _k = value; }
}
private static int _c = 30;
public static int c
{
get { Console.WriteLine($"evaluating c ({_c})"); return _c; }
set { Console.WriteLine($"{value} assigned to c"); _c = value; }
}
public static void Test()
{
k += c += k += c;
}
答案 0 :(得分:1)
只要您的 CleanScreen 过程设置视频模式AL
就会包含(剩余)值16h,该值是十进制的22。没有这样的视频模式!
您没有提及它,但是我有点假设您使用的是13h(320x200)视频模式。
xor bx, bx mov ax,05h ; Return button press data int 33h shr cx, 1
此鼠标功能在CX
和DX
中返回 x,y坐标。
您的程序甚至不使用y坐标!
减法0A000h又是什么呢?视频存储器位于段地址0A000h上,但这与该程序无关。
您需要做的是将CX
与图片的左侧和右侧坐标进行比较,并将DX
与图片的顶部和底部坐标进行比较。
cmp cx, [LeftX]
jb outside
cmp cx, [RightX] ; RightX == LeftX + Width - 1
ja outside
cmp dx, [TopY]
jb outside
cmp dx, [BottomY] ; BottomY == TopY + Height - 1
ja outside
;
; Here you're inside the picture
;
outside:
;
; Here you're outside the picture
;