在VESA编程中如何调用鼠标

TBBT 2000-02-17 08:11:00
各位大侠:
小弟在DOS下用BC++3。1编写VESA程序时,发现无法在640X480X256(或更高分辨率)下无法调用鼠标。用INT33调用可返回X,Y坐标,但与屏幕大小不符,且无法显示
鼠标。
请问如何解决之?
...全文
141 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Philip 2000-02-25
  • 打赏
  • 举报
回复
我也曾经遇到过这样的问题,换用新版本的微软通用鼠标驱动程序就正常了。
  • 打赏
  • 举报
回复
用鼠标中断的这个功能监视鼠标的状态,不让系统画鼠标,知道鼠标的位置了需要自己画才能正确。
因为鼠标驱动程序一般不处理SVGA的显示模式,包括256色以上所有模式,甚至返回的坐标都是错误的,必须用这个方法:

INT33H的这个功能是安装一个鼠标监视子程序,ES:DX是这个子程序的地址,CX是在什么情况INT33H需要调用这个子程序,AX是功能号。
INT 33H:
AX = 000Ch
CX = call mask (在什么情况相应要安装的子程序)
bit 0 call if mouse moves (移动)
bit 1 call if left button pressed (左按钮按下)
bit 2 call if left button released (左按钮抬起)
bit 3 call if right button pressed (右按钮按下)
bit 4 call if right button released (右按钮抬起)
bit 5 call if middle button pressed (Mouse Systems/Logitech
mouse)
bit 6 call if middle button released (Mouse Sys/Logitech mouse)
ES:DX -> FAR routine

调用这个中断后,在由CX规定的情况下响应这个中断,并调用这个监视子程序,在SVGA编程一定要截获鼠标移动,其他可以选。

Notes: when the subroutine is called, it is passed the following values(监视程序的参数):
AX = condition mask (same bit assignments as call mask 与调用INT33时的CX相同)
BX = button state (按钮状态)
CX = cursor column (X坐标,在SVGA模式数值不正确)
DX = cursor row (Y坐标,在SVGA模式数值不正确)
SI = horizontal mickey count (与上次调用在X方向移动的距离,在SVGA模式非常有用)
DI = vertical mickey count (与上次调用在Y方向移动的距离,在SVGA模式非常有用)

一般安装这个监视程序在第一次响应这个程序时保存所有状态,不作任何处理,以后每响应一次都与上次比较,得出新的鼠标位置,而鼠标的初始位置随你的喜好,比如在屏幕中心。

一般都是在程序循环里面检查鼠标位置变化了就在擦掉老位置的鼠标,在新位置重新画上,才能正确。

注意:在监视程序里面的SI和DI值表示你的鼠标在桌子上移动的距离,并不理会在屏幕上的位置,即使超出屏幕之外。这就是很多程序在鼠标移到屏幕边缘再继续移动就能滚屏,并且滚屏由鼠标在桌子上的移动决定的道理。

在程序改变显示模式或结束之前一定要调用INT33H的0号功能再初始化一遍鼠标,清掉你的监视程序,否则会死机的。

参考程序:
void _saveregs far MouseSubHandler(void) //必须是 _saveregs far 类型的函数
{
int Bn;
int Nmx, Nmy;
int Xcnt,Ycnt;

asm mov Bn, ax; //按钮状态
asm mov Nmx, cx; //标准VGA显示模式的鼠标X坐标
asm mov Nmy, dx; //标准VGA显示模式的鼠标Y坐标
asm mov Xcnt,si; //x方向移动的距离
asm mov Ycnt,di; //y方向移动的距离

if(Bn&1)
//mouse moved
if(Bn&2)
//left button pressed
if(Bn&4)
//left button released
if(Bn&8)
//right button pressed
if(Bn&16)
//right button pressed
if(Bn&32)
//mid button pressed
if(Bn&64)
//mid button released
}

void far SetNewMouseSubHandler(void)
{
REGS r;
SREGS sr;

r.x.ax = 0x000c;
r.x.cx = 0x007f; //007FH = 01111111B
r.x.dx = FP_OFF(MouseSubHandler);
sr.es = FP_SEG(MouseSubHandler);
int86x(0x33, &r, &r, &sr);
}

这个方法在任何显示模式下都可以使用。
Eros 2000-02-17
  • 打赏
  • 举报
回复
不知道你用的是哪个BGI,部分的BGI有BUG,需要专门的BGI来支持鼠标,原因可能是显存分页的原因,且在不同的显卡,不同的环境(WINDOWS窗口,纯DOS中)表现也不一样,原因可能是鼠标驱动的问题。目前,有S3,TVGA,和单独VESA的许多版本的BGI可以找到,并且都有对应的支持鼠标的BGI。
Menuet 是英国一位软件工程师 Ville Mikael Turjanmaa 利用业余时间开发的,完全由 x86汇编语言于 2000年写成的一款32位操作系统。经过大量的修改与完善后, Menuet OS目前已经成为一个用功能完善的操作系统,目前的版本号是 0.74。Ver 0.75 正在开发。 MenuetOS 并不是一个类Unix操作系统,它完全由 Asm语言编写的系统。Menuet 不基于当前任何一款流行的操作系统而运作,主要是为在开发过程避免复杂的编程及各种不可预料的 Bug。 尽管Menuet是完全用 32位汇编写成的,但它的系统程序构架并不完全是为汇编语言而保留,它的接口实际上可用于任何程序设计语言。尽管如此,系统开发的目的还是为更简化 Asm程序设计而设计,系统下 GUI编程尤其体现这一点。 Menuet OS 的特点: 多任务,多线程 图形用户界面,可以达到 16bit color,1280x1024 dpi 程序开发比 Windows 和 Linux 之类的系统更容易 IDE环境:自带应用程序及内核编辑编译工具 完全开放的源代码(GPL) TCP/IP 协议栈、PPP 及 局域网络 HTTP/MP3/Mail 服务器,3D迷宫 自由的界面,窗口可换“皮肤” 仅一张 1.44M 软盘可以装下! Menuet OS 对硬件的要求 : CPU : 386 或更高 显示: 支持 VESA 2.0的显卡(推荐使用)或支持 VESA 1.2 的显卡,至少 1M显存。VGA/EGA 显示器。(注:目前的显卡都支持 VESA 3.0,同时也向下兼容) 声卡: 兼容 SB(Sound blaster) 16声效卡 硬盘: LBA 模式 FAT32文件系统 网络: Realtech 8029/8139 芯片组网卡 鼠标: PS/2 或 COM 或 USB /*别相信这个,我的USB鼠标就用不了*/ 内存: 至少32M
21春《计算机基础》北语网院作业_4  21春《计算机基础》北语网院作业-4全文共8页,当前为第1页。 21春《计算机基础》作业_4 1. 在Windows,利用"搜索"功能查找磁盘的某个文件时,不可以使用的方法是按文件()查找。 A.名称和位置 B. 日期 C. 属性 D. 包含的文字 答:——C—— 2. ISA、EISA、VESA、PCI是微机()的标准 A.显示 B.主板 C.总线 D.存储器 答:——C—— 3. 对B8单元格绝对地址引用的表达方式为( )。 A.$B8 B.$B$8 C.B$8 D.B8 答:——B—— 4. 下列操作,( )是退出PowerPoint的操作。 A.单击"文件"菜单的"保存"命令 B.单击PowerPoint窗口标题栏右端的"最小化"按钮 C.双击PowerPoint窗口标题栏左端的"演示文档图标" D.双击标题 答:———— 5. 控制面板的"字体"工具用于() A.选择Windows菜单字体 B.选择 Windows窗口字体 C.补充新字体 D.自定义字体 答:———— 6. 下列存储器存取速度最快的是( )。 A.硬盘 B.软盘 21春《计算机基础》北语网院作业-4全文共8页,当前为第2页。C.内存 D.光盘 答:———— 7. 微机存储器系统的cache是() A.只读存储器 B.高速缓冲存储器 C.可编程只读存储器 D.可摖除可在编程只读存储器 答:———— 8. 删除某个应用程序的快捷方式图标表示() A.只删除了图标,该应用程序被保留 B.既删除了图标,有删除了该程序 C.该程序在运行时可能会出现问题 D.磁盘上改程序将无法启动 答:———— 9. Windows任务栏的快捷启动工具栏列出了( )。 A.部分应用程序的快捷方式 B.运行但处于最小化的应用程序名 C.所有可执行应用程序的快捷方式 D.已经启动并处于前台运行的应用程序名 答:———— 21春《计算机基础》北语网院作业-4全文共8页,当前为第3页。10. 在Word文档,欲调整行距,可使用"格式"菜单的()命令 A.字体 B.段落 C.样式 D.制表位 答:———— 11. 多媒体技术的主要特征是( )。 A.多样性、交互性、集成性、非线性 B.独立性、交互性、集成性、时变性 C.不确定性、交互性、集成性、非线性 D.多样性、交互性、独立性、时变性 答:———— 12. 在Word,工具栏标有百分比的列表框的作用是改变()的显示比例。 A.Word窗口 B.菜单栏 C.工具栏 D.Word文档窗口内容 答:———— 13. Internet可提供多种服务,其应用最广泛的为()。 21春《计算机基础》北语网院作业-4全文共8页,当前为第4页。A.Telnet. 插入点位于某段落的某个字符前时,从"格式工具栏"的"样式"框选择了某种样式,这种样式将对()起作用 A.该字符 B.字符所在行 C.当前段落 D.所有段落 答:———— 17. Windows的文档文件是() A.指文本文件 B.指图形文件 C.指用高级程序设计语言编写的源程序文件 D.以上都对 答:———— 18. 在"空白"自动版式的幻灯片内输入"标题"的文字内容,( )方式比较简单方便。 A.使用"幻灯片"视图 B.使用"大纲"视图 C.使用"幻灯片浏览"视图 D.使用"备注页"视图 答:———— 19. 在Windows,移动窗口时,可将鼠标21春《计算机基础》北语网院作业-4全文共8页,当前为第5页。放在(),然后拖动鼠标。 A.窗口内任意位置 B.窗口四角或四边 C.窗口标题栏上 D.窗口滚动条上 答:———— 20. 关于PowerPoint幻灯片的切换,错误的说法是( )。 A.幻灯片切换的操作可同时应用于所有的幻灯片 B.演示文稿各幻灯片切换方式可以不同,但速度总是相同的 C.幻灯片切换的同时可以设置声音效果 D.设走幻灯片切换的同时,还可以指定幻灯片自动换页以及换页的时间间隔 答:———— 21. 修改桌面上的文件名,有下列步骤: 输入新的文件夹名; 按回车键; 右键单击此文件夹; 键入"M"。正确的操作步骤是()。 A. B. 21春《计算机基础》北语网院作业-4全文共8页,当前为第6页。C. D. 答:———— 22. 以下属于多媒体技术应用范畴的是( ) A.教育培训 B.虚拟现实 C.商业服务 D.以上都对 答:———— 23. 计算机病毒是指() A.设计不完善的程序 B.编制有错误的程序 C.被破坏了的程序 D.具有自我复制和破坏性的特制程序 答:———— 24. 以下关于对话框的叙述不正确的是() A.对话框没有最大化按钮 B.对话框没有最小化按钮 C.对话框不能改变形状大小 D
enuetOS是一个为x86(IBM兼容)计算机开发的业余操作系统,它是一款完全由汇编语言(32位)写成的迷你操作系统,因此它更小、更快,并且系统本身用应用程序占用很少的系统资源。   项目最初是芬兰人 Ville Turjanmaa(赫尔辛基大学) 利用业余时间开发完成。现在世界各地都有 MenuetOS 的开发者,他们正在不断完善这个操作系统。    这个项目目前由 Jarek Pelczar(jarekp3[@]wp[.]pl) 接管。项目的文版由本站站长 E-mean X. 开发。   MenuetOS 并不像现在流行的 Linux 及其它如 FreeBSD、Minix 一样是一个类 Unix 的操作系统,它完全由32位汇编语言编写的系统。Menuet 及其应用程序不基于当前任何一款流行的操作系统而运作,主要是为在开发过程避免复杂的编程及各种不可预料的 Bug。   尽管Menuet是完全用 32位汇编写成的,但它的系统程序构架并不完全是为汇编语言而保留,它的接口实际上可用于任何程序设计语言。尽管如此,系统开发的目的还是为更简化 Asm程序设计而设计,系统下 GUI编程尤其体现这一点。 ·Menuet OS 的特点   - 多任务,多线程  - 图形用户界面,可以达到 32bit color,1280x1024 分辨率  - 程序开发比 Windows 和 Linux 之类的系统更容易  - IDE环境:自带应用程序及内核编辑编译工具  - 完全开放的源代码(GPL)  - TCP/IP 协议栈、PPP 及 局域网络  - HTTP,MP3,Mail 服务器,3D迷宫  - irc, http, nntp 及 tftp客户端  - 自由的界面,窗口可换“皮肤”  - 仅一张 1.44M 软盘可以装下! ·Menuet OS 对硬件的基本要求  CPU : 386 或与之相兼容的 CPU 显示: 支持 VESA 2.0(建议使用) 或 VESA 1.2 的显卡,VGA/EGA 显示器。 声卡: Creative SB(Sound blaster) 16或兼容声效卡 硬盘: ATA LBA 模式 FAT32文件系统 网络: Realtech 8029/8139, Intel 8255x, 3com, PCNET32 Ethernet PCI cards PPP dialup 鼠标: PS/2 或 COM 内存: 至少32M
MenuetOS是一个为x86(IBM兼容)计算机开发的业余操作系统,它是一款完全由汇编语言(32位)写成的迷你操作系统,因此它更小、更快,并且系统本身用应用程序占用很少的系统资源。   项目最初是芬兰人 Ville Turjanmaa(赫尔辛基大学) 利用业余时间开发完成。现在世界各地都有 MenuetOS 的开发者,他们正在不断完善这个操作系统。    这个项目目前由 Jarek Pelczar(jarekp3[@]wp[.]pl) 接管。项目的文版由本站站长 E-mean X. 开发。   MenuetOS 并不像现在流行的 Linux 及其它如 FreeBSD、Minix 一样是一个类 Unix 的操作系统,它完全由32位汇编语言编写的系统。Menuet 及其应用程序不基于当前任何一款流行的操作系统而运作,主要是为在开发过程避免复杂的编程及各种不可预料的 Bug。   尽管Menuet是完全用 32位汇编写成的,但它的系统程序构架并不完全是为汇编语言而保留,它的接口实际上可用于任何程序设计语言。尽管如此,系统开发的目的还是为更简化 Asm程序设计而设计,系统下 GUI编程尤其体现这一点。 ·Menuet OS 的特点   - 多任务,多线程  - 图形用户界面,可以达到 32bit color,1280x1024 分辨率  - 程序开发比 Windows 和 Linux 之类的系统更容易  - IDE环境:自带应用程序及内核编辑编译工具  - 完全开放的源代码(GPL)  - TCP/IP 协议栈、PPP 及 局域网络  - HTTP,MP3,Mail 服务器,3D迷宫  - irc, http, nntp 及 tftp客户端  - 自由的界面,窗口可换“皮肤”  - 仅一张 1.44M 软盘可以装下! ·Menuet OS 对硬件的基本要求  CPU : 386 或与之相兼容的 CPU 显示: 支持 VESA 2.0(建议使用) 或 VESA 1.2 的显卡,VGA/EGA 显示器。 声卡: Creative SB(Sound blaster) 16或兼容声效卡 硬盘: ATA LBA 模式 FAT32文件系统 网络: Realtech 8029/8139, Intel 8255x, 3com, PCNET32 Ethernet PCI cards PPP dialup 鼠标: PS/2 或 COM 内存: 至少32M

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧