assembly 我希望这个菜单可以用鼠标选择

fruv7luv  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(98)

我有这个菜单:

data segment
    menu db "Please select a choice:" 
         db "1. J",13,10
         db "2. C",13,10
         db "3. G",13,10 
         db "4. T" ,13,10  
         db "5. C",13,10      
         db "6. E",13,10,'$

ends

我希望用户能够用鼠标点击这些选项(1-6)中的一个。例如,我用鼠标点击“1.J”,点击后要求输入。
我在用鼠标点击的部分卡住了。
我想不出一个方法来组织这个推理。

nfg76nw0

nfg76nw01#

我一直在做类似的事情,我的想法是这样的:因为每个菜单选项都有四个字符(不算换行符),你可以画一个假想的长方形(实际上不需要在屏幕上绘制此矩形),宽4个字符,高6个字符,使用一组相对于打印菜单位置的坐标,然后读取鼠标信息,查看以下情况是否正确:

  • 按住鼠标左键,并且
  • 游标的行和列值落在矩形坐标内。

作为一个例子,这里有一个想法,你可能会弄清楚,如果鼠标光标是在矩形:

CompareMouseToBoundingBox:
;in: cx = column mouse is in, dx = row mouse is in.
cmp cx,[rectangleX1]  ;some address in memory where you stored the rectangle coords
jb notInBounds

cmp cx,[rectangleX2]
ja notInBounds

cmp dx,[rectangleY1]
jb notInBounds

cmp dx,[rectangleY2]
jbe notInbounds
   ;in bounds
   mov al,0FFh   ;we'll consider this value to be "true"
   ret

notInBounds:
mov al,0         ;we'll consider this value to be "false"
ret

有几种不同的方法来读取鼠标,最简单的方法是阅读当前按钮状态,但如果(例如)用户在不在菜单上时点击并按住鼠标按钮,然后将其拖到菜单上,则可能会导致逻辑错误。这可能并不总是所需的行为。int 33hah = 05h可能会帮助您解决此问题。

相关问题