1 窗口切换(1)(harib21a)
前天开始我们的应用程序可以显示自己的窗口了,现在画面上到处都是窗口,我们急需能够切换窗口顺序的功能,使得在需要的时候可以查看最下面的窗口的内容。这个功能看起来不难,我们马上来实现它。
不过,一上来就实现“点击鼠标切换窗口”的功能还有点难,所以我们先从用键盘切换的方法入手吧,即按下F11时,将最下面的那个窗口放到最上面。
■■■■■
要实现这一功能我们首先需要知道F11的按键编码。根据下面网址中的资料:
http://community.osdev.info/?(AT)keyboardkeyboard)
F11的按键编码为0x57(F12为0x58)。知道了这些,接下来只要稍微修改一下bootpack.c即可,只需要添加3行代码。
本次的bootpack.c节选
void HariMain(void)
{
(中略)
for (;;) {
(中略)
if (fifo32_status(&fifo) == 0) {
(中略)
} else {
(中略)
if (256 <= i && i <= 511) { /*键盘数据*/
(中略)
/*从此开始*/ if (i == 256 + 0x57 && shtctl->top > 2) { /* F11 */
sheet_updown(shtctl->sheets[1], shtctl->top - 1);
/*到此结束*/ }
(中略)
} else if (512 <= i && i <= 767) { /*鼠标数据*/
(中略)
} else if (i <= 1) { /*光标用定时器*/
(中略)
}
}
}
}
恐怕没几个人记得图层的操作方法了吧,我们还是稍微详细地讲解一下。
sheet_updown(shtctl->sheets[1], shtctl->top - 1);
这句代码的功能是将从下面数第2个图层(最下面一个图层shtctl —> sheets[0]是背景)的高度提升为shtctl —> top –1。Shtctl —> top这个高度存放的是最上面一个图层的高度,这个图层永远是绘制鼠标指针用的,我们不能将窗口放在比鼠标还高的位置上(搞个恶作剧倒是挺有趣的),因此将窗口高度设置为鼠标图层的下面一层。
我们来试试看能不能成功,“make run”——虽然我们已经做了无数遍,但笔者还是乐在其中。撒花!运行成功了!
■■■■■
按一次F11,将命令行窗口提升到了上面