窗口及输入切换
我们先来实现用键盘切换窗口,按下F11键,将最下面的窗口移动到最上面,这里F11按键的编码为0x57。
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) {
/* 光标用定时器 */
(略)
}
}
}
}
shtctl->top是最上面的一个图层,这个图层是用于绘制鼠标指针,要将窗口放在鼠标指针图层的下一个图层。
接下来实现鼠标点击来切换窗口的功能,鼠标点击画面时,要从上到下判断鼠标点击的是哪个图层,接着判断鼠标点击的位置落在哪个图层范围内。
bootpack.c节选
if ((mdec.btn & 0x01) != 0) {
/* 按下左键 */
/* 按照从上到下的顺序寻找鼠标所指向的图层 */
for (j = shtctl->top - 1; j > 0; j--) {
sht = shtctl->sheets[j];
x = mx - sht->vx0;
y = my - sht->vy0;
if (0 <= x && x &l