6 用鼠标切换输入窗口(harib21f)
我们已经实现了输入窗口的切换,着实进步不小,只是用Tab键来进行切换的操作和Windows还不一样。在Windows中,只要用鼠标在窗口上点击一下,那个窗口就会被切换到画面的最上方,而且键盘输入也会自动切换到该窗口。因此,我们要让“纸娃娃系统”也可以通过简单的点击就能完成输入切换。
刚才为了实现用Tab键切换,我们修改了大量的代码,而这次我们只需要添加一点点代码就好了,因为只需要通过鼠标操作实现和键盘操作相同的功能而已。
本次的bootpack.c节选
void HariMain(void)
{
(中略)
for (;;) {
(中略)
if (fifo32_status(&fifo) == 0) {
(中略)
} else {
(中略)
if (256 <= i && i <= 511) { /*键盘数据*/
(中略)
} else if (512 <= i && i <= 767) { /*鼠标数据*/
if (mouse_decode(&mdec, i - 512) != 0) {
(中略)
if ((mdec.btn & 0x01) != 0) {
/*按下左键*/
if (mmx < 0) {
/*如果处于通常模式*/
/*按照从上到下的顺序寻找鼠标所指向的图层*/
for (j = shtctl->top - 1; j > 0; j--) {
(中略)
if (0 <= x && x < sht->bxsize && 0 <= y && y < sht->bysize) {
if (sht->buf[y * sht->bxsize + x] != sht->col_inv) {
sheet_updown(sht, shtctl->top - 1);
/*从此开始*/ if (sht != key_win) {
cursor_c = keywin_off(key_win, sht_win, cursor_c,
cursor_x);
key_win = sht;
cursor_c = keywin_on(key_win, sht_win, cursor_c);
/*到此结束*/ }
if (3 <= x && x < sht->bxsize - 3 && 3 <= y && y < 21) {
mmx = mx; /*进入窗口移动模式*/
mmy = my;
}
if (sht->bxsize - 21 <= x && x < sht->bxsize - 5 && 5 <= y && y < 19) {
/*点击“×”按钮*/
(中略)
}
break;
}
}
}
} else {
(中略)
}
} else {
(中略)
}
}
} else if (i <= 1) { /*光标用定时器*/
(中略)
}
}
}
}
好了,我们来“make run”,点击一下应用程序窗口试试看吧。
只需要点击一下就可以完成切换啦