1 窗口切换(1)(harib21a)

前天开始我们的应用程序可以显示自己的窗口了,现在画面上到处都是窗口,我们急需能够切换窗口顺序的功能,使得在需要的时候可以查看最下面的窗口的内容。这个功能看起来不难,我们马上来实现它。

不过,一上来就实现“点击鼠标切换窗口”的功能还有点难,所以我们先从用键盘切换的方法入手吧,即按下F11时,将最下面的那个窗口放到最上面。

■■■■■

要实现这一功能我们首先需要知道F11的按键编码。根据下面网址中的资料:

http://community.osdev.info/?(AT)keyboardkeyboard)

F11的按键编码为0x57(F12为0x58)。知道了这些,接下来只要稍微修改一下bootpack.c即可,只需要添加3行代码。

本次的bootpack.c节选

  1. void HariMain(void)
  2. {
  3. (中略)
  4. for (;;) {
  5. (中略)
  6. if (fifo32_status(&fifo) == 0) {
  7. (中略)
  8. } else {
  9. (中略)
  10. if (256 <= i && i <= 511) { /*键盘数据*/
  11. (中略)
  12. /*从此开始*/ if (i == 256 + 0x57 && shtctl->top > 2) { /* F11 */
  13. sheet_updown(shtctl->sheets[1], shtctl->top - 1);
  14. /*到此结束*/ }
  15. (中略)
  16. } else if (512 <= i && i <= 767) { /*鼠标数据*/
  17. (中略)
  18. } else if (i <= 1) { /*光标用定时器*/
  19. (中略)
  20. }
  21. }
  22. }
  23. }

恐怕没几个人记得图层的操作方法了吧,我们还是稍微详细地讲解一下。

  1. sheet_updown(shtctl->sheets[1], shtctl->top - 1);

这句代码的功能是将从下面数第2个图层(最下面一个图层shtctl —> sheets[0]是背景)的高度提升为shtctl —> top –1。Shtctl —> top这个高度存放的是最上面一个图层的高度,这个图层永远是绘制鼠标指针用的,我们不能将窗口放在比鼠标还高的位置上(搞个恶作剧倒是挺有趣的),因此将窗口高度设置为鼠标图层的下面一层。

我们来试试看能不能成功,“make run”——虽然我们已经做了无数遍,但笔者还是乐在其中。撒花!运行成功了!

■■■■■

1 窗口切换(1)(harib21a) - 图1

按一次F11,将命令行窗口提升到了上面