MacOS环境-手写操作系统-36-Tab键切换窗口

简介: MacOS环境-手写操作系统-36-Tab键切换窗口

Tab键切换窗口

1.简介

我们使用操作系统的时候 一个必不可少的功能就是通过Tab间在不同的窗口中来回切换


这种便捷方式使得你不必要挪动鼠标去点击某个窗口 只要不停的按Tab键


直到你的目标窗口被激活为止 一旦窗口被Tab键激活后 对应的窗口会响应你在键盘的输入


我们本节的目的是在系统中实现这个功能


2.代码

实现这个功能不难 大体设想是


我们监听键盘输入 如果当前按下的键盘是Tab键 我们得到当前激活的窗口 把它的头部绘制成灰色


然后找到下一个可以被激活的窗口 然后把它的头部绘制成蓝色


CMain

void CMain(void) {
    ....
    int key_to = 0;

    for(;;) {
    ....
    else if (data == 0x0f) {
               if (key_to == 0) {
                   key_to = 1;
                   make_wtitle8(shtctl, shtMsgBox,"task_a", 0);
                   make_wtitle8(shtctl, sht_cons, "console", 1);
               } else {
                   key_to = 0;
                   make_wtitle8(shtctl, shtMsgBox,  "task_a",1);
                   make_wtitle8(shtctl, sht_cons, "console", 0);
               }              

              sheet_refresh(shtctl, shtMsgBox, 0, 0, shtMsgBox->bxsize, 21);
              s
    ....
    }
    ....
}

当Tab键被按下时 系统获得的扫描码是0x0f


收到这个数值 表示系统接收到了Tab键按下的事件


此时它判断当前获得输入焦点的是哪个窗口


如果当前激活的是Message Box 那么我们就把它的头部绘制成灰色


把命令控制台的头部绘制成蓝色


绘制窗口头部的函数是make_wtitle8 它的函数原型如下


void make_wtitle8(struct SHTCTL *shtctl, struct SHEET *sht,char *title, char act);


最后一个参数act 决定了窗口的头部是绘制成灰色还是蓝色


如果act = 0那么函数把窗口的头部绘制成灰色


如果act = 1


那么函数就把窗口的头部绘制成蓝色


我们再看看它的实现

void make_wtitle8(struct SHTCTL *shtctl, struct SHEET * sht,  char *title, char act) {
    static char closebtn[14][16] = {
                "OOOOOOOOOOOOOOO@",
                "OQQQQQQQQQQQQQ$@",
                "OQQQQQQQQQQQQQ$@",
                "OQQQ@@QQQQ@@QQ$@",
                "OQQQQ@@QQ@@QQQ$@",
                "OQQQQQ@@@@QQQQ$@",
                "OQQQQQQ@@QQQQQ$@",
                "OQQQQQ@@@@QQQQ$@",
                "OQQQQ@@QQ@@QQQ$@",
                "OQQQ@@QQQQ@@QQ$@",
                "OQQQQQQQQQQQQQ$@",
                "OQQQQQQQQQQQQQ$@",
                "O$$$$$$$$$$$$$$@",
                "@@@@@@@@@@@@@@@@"
        };

    int x, y;
    char c, tc, tbc;
    if (act != 0) {
        tc = COL8_FFFFFF;
        tbc = COL8_000084;
    } else {
        tc = COL8_C6C6C6;
        tbc = COL8_848484;
    }

    boxfill8(sht->buf, sht->bxsize, tbc, 3, 3, sht->bxsize - 4, 20);
    showString(shtctl, sht, 24, 4, tc , title);

     for (y = 0; y < 14; y++) {
         for (x = 0; x < 16; x++) {
             c = closebtn[y][x];
             if (c == '@') {
                 c = COL8_000000;
             } else if (c == '$') {
                 c = COL8_848484;
             } else if (c == 'Q') {
                 c = COL8_C6C6C6;
             }
             else {
                 c = COL8_FFFFFF;
             }

             sht->buf[(5+y) * sht->bxsize + (sht->bxsize - 21 + x)] = c;
         }

     }

}

这部分代码原来是在窗口绘制函数make_window8里面的


现在我们把头部绘制这部分单独拎出来 形成一个独立函数


同时做一些改动 如果输入参数act的值是1 那么把tbc 设置成COL8_000084


这个颜色就是我们上面看到的窗口被激活时 头部显示的深蓝色


如果act的值是0 那么tbc的值转换为COL8_848484


这个颜色就是窗口失去输入焦点后对应的灰色


3.编译运行

目录
相关文章
|
3月前
|
监控 Linux 云计算
Linux操作系统在云计算环境中的实践与优化###
【10月更文挑战第16天】 本文探讨了Linux操作系统在云计算环境中的应用实践,重点分析了其在稳定性、安全性和高效性方面的优势。通过具体案例,阐述了Linux如何支持虚拟化技术、实现资源高效分配以及与其他开源技术的无缝集成。文章还提供了针对Linux系统在云计算中的优化建议,包括内核参数调整、文件系统选择和性能监控工具的应用,旨在帮助读者更好地理解和应用Linux于云计算场景。 ###
70 3
|
3月前
|
存储 C语言 iOS开发
MacOS环境-手写操作系统-48-让内核从错误中恢复
MacOS环境-手写操作系统-48-让内核从错误中恢复
59 0
|
3月前
|
存储 API C语言
MacOS环境-手写操作系统-46,47-C语言开发应用程序
MacOS环境-手写操作系统-46,47-C语言开发应用程序
44 0
|
3月前
|
编译器 API C语言
MacOS环境-手写操作系统-45-C语言开发应用程序
MacOS环境-手写操作系统-45-C语言开发应用程序
60 0
|
3月前
|
小程序 iOS开发 MacOS
MacOS环境-手写操作系统-44-运行简单的程序
MacOS环境-手写操作系统-44-运行简单的程序
35 0
|
2月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
70 0
Vanilla OS:下一代安全 Linux 发行版
|
2月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
81 4
|
2月前
|
人工智能 安全 Linux
|
3月前
|
Unix 物联网 大数据
操作系统的演化与比较:从Unix到Linux
本文将探讨操作系统的历史发展,重点关注Unix和Linux两个主要的操作系统分支。通过分析它们的起源、设计哲学、技术特点以及在现代计算中的影响,我们可以更好地理解操作系统在计算机科学中的核心地位及其未来发展趋势。
|
5月前
|
编解码 安全 Linux
基于arm64架构国产操作系统|Linux下的RTMP|RTSP低延时直播播放器开发探究
这段内容讲述了国产操作系统背景下,大牛直播SDK针对国产操作系统与Linux平台发布的RTMP/RTSP直播播放SDK。此SDK支持arm64架构,基于X协议输出视频,采用PulseAudio和Alsa Lib处理音频,具备实时静音、快照、缓冲时间设定等功能,并支持H.265编码格式。此外,提供了示例代码展示如何实现多实例播放器的创建与管理,包括窗口布局调整、事件监听、视频分辨率变化和实时快照回调等关键功能。这一技术实现有助于提高直播服务的稳定性和响应速度,适应国产操作系统在各行业中的应用需求。
156 3