首页 > 其他分享 >11.1/2 鼠标显示问题(harib08a)11.2 实现画面外的支持(harib08b)

11.1/2 鼠标显示问题(harib08a)11.2 实现画面外的支持(harib08b)

时间:2023-03-02 21:59:10浏览次数:39  
标签:binfo int 11.1 harib08b 11.2 ctl my mx

  • 11.1 鼠标显示问题(harib08a)

存在问题:

​ 在harib07d中鼠标移动到最右侧后就不能再往右移了

解决办法:

if (mx > binfo->scrnx - 16) {
mx = binfo->scrnx - 16;
}
if (my > binfo->scrny - 16) {
my = binfo->scrny - 16;
}

修改为:

if (mx > binfo->scrnx - 1) {
mx = binfo->scrnx - 1;
}
if (my > binfo->scrny - 1) {
my = binfo->scrny - 1;
}

又出现以下问题:


图 11.1.1

  • 11.2 实现画面外的支持(harib08b)

那么,为什么会画到另一边去呢原因在于:VRAM的存储方式。由harib08a的代码,增大了mx,my的范围,使得鼠标所在的图层超出了屏幕,但sheet_refreshsub的代码决定它不会有 越界判断,而VRAM是一个一维数组,这会导致图像被写入“下一行屏幕”,即超出了改行在 一维数组中的范围。如图11.2.1

                                            图11.2.1

经过上面的理解,便可得到下面的改进办法

解决办法:

  • 只有 sheet_refreshsub 是把图层内容写入VRAM,故可增加 检测,使其不会绘制超出画面的区域
void sheet_refreshsub(struct SHTCTL *ctl, int vx0, int vy0, int vx1, int vy1)
{
int h, bx, by, vx, vy, bx0, by0, bx1, by1;
unsigned char *buf, c, *vram = ctl->vram;
struct SHEET *sht;
/* 如果refresh的范围超出了画面则修正 */
if (vx0 < 0) { vx0 = 0; }
if (vy0 < 0) { vy0 = 0; }
if (vx1 > ctl->xsize) { vx1 = ctl->xsize; }
if (vy1 > ctl->ysize) { vy1 = ctl->ysize; }
for (h = 0; h <= ctl->top; h++) {
(中略)
}
return;

标签:binfo,int,11.1,harib08b,11.2,ctl,my,mx
From: https://www.cnblogs.com/LZHKKK/p/17173680.html

相关文章

  • 实测10.2.0.5/11.2.0.4版本修改DB_FILES参数不需要重建控制文件
    最近有客户数据文件达到db_files参数上限,和同事就这个参数的修改沟通时,许多人还认为是以前8i/9i时代,修改此参数后需要重建控制文件。通过测试验证修改10.2.0.5/11.2.0.4版本......
  • Day 11 11.1 Xpath解析
    xpath解析xpath在Python的爬虫学习中,起着举足轻重的地位,对比正则表达式re两者可以完成同样的工作,实现的功能也差不多,但xpath明显比re具有优势,在网页分析上使re退居二线。......
  • Day 11 11.2 文件操作
    文件操作引言到目前为止,我们做的一切操作,都是在内存里进行的,这样会有什么问题吗?如果一旦断电或发生意外关机了,那么你辛勤的工作成果将瞬间消失。是不是感觉事还挺大的呢......
  • WindowS 平台下单实例Oracle 11.2.0.1 升级Oracle 11.2.0.4
     由于业务环境需要,只有11.2.0.4可以直接升级19C,所以现需先升级到11.2.0.4主要步骤如下:备份数据,RMAN全备,必要的话建议拷贝一份HOME目录;下载升级包11.2.0.4关闭数据库,包括监......
  • 11.1 应用和硬件无关?
     在C语言等高级编程语言开发的Windows应用中,很少有能直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。 不过,Windows提供了通过应用来间接控制硬件的方......
  • 11.2支撑硬件输入输出的IN指令和OUT指令
       Windows控制硬件时借助的是输入输出指令。其中具有代表性的两个输入输出指令就是IN和OUT。这些指令也是汇编语言的助记符。   IN指令和OUT指令的语法如图1......
  • 11.1应用和硬件无关?
       在C语言等高级编程语言开发的Windows应用中,大家很少能接触到直接控制硬件的指令。这是因为硬件的控制是由Windows全权负责的。   不过,Windows提供了通过应......
  • 【保姆级】Python最新版3.11.1开发环境搭建,看这一篇就够了
    工欲善其事必先利其器,在使用Python开发程序之前,在计算机上搭建Python开发环境是必不可少的环节,目前Python最新稳定版本是3.11.1,且支持到2027年,如下图所示本文手把手带你......
  • WINDOWS安装Oracle11.2.0.4
    (一)Oracle服务器端安装1.运行Oracle11g服务器端安装程序setup.exe,弹出如下界面:2.如上界面中,把默认打上的勾去掉,然后点击【下一步】,弹出如下界面:3.如上界面中,选择跳过软件......
  • 11.2支撑硬件输入输出的IN指令和OUT指令
      上图是IN指令和OUT指令的语法  上图是数据传递 ......