您的位置:首页 > 其它

读书笔记《30天自制操作系统》day11

2012-12-17 14:49 501 查看
1. 窗口的绘制,与鼠标绘制类似

void make_window8(unsigned char *buf, int xsize, int ysize, char *title)
{
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;
boxfill8(buf, xsize, COL8_C6C6C6, 0,         0,         xsize - 1, 0        );
boxfill8(buf, xsize, COL8_FFFFFF, 1,         1,         xsize - 2, 1        );
boxfill8(buf, xsize, COL8_C6C6C6, 0,         0,         0,         ysize - 1);
boxfill8(buf, xsize, COL8_FFFFFF, 1,         1,         1,         ysize - 2);
boxfill8(buf, xsize, COL8_848484, xsize - 2, 1,         xsize - 2, ysize - 2);
boxfill8(buf, xsize, COL8_000000, xsize - 1, 0,         xsize - 1, ysize - 1);
boxfill8(buf, xsize, COL8_C6C6C6, 2,         2,         xsize - 3, ysize - 3);
boxfill8(buf, xsize, COL8_000084, 3,         3,         xsize - 4, 20       );
boxfill8(buf, xsize, COL8_848484, 1,         ysize - 2, xsize - 2, ysize - 2);
boxfill8(buf, xsize, COL8_000000, 0,         ysize - 1, xsize - 1, ysize - 1);
putfonts8_asc(buf, xsize, 24, 4, COL8_FFFFFF, 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;
}
buf[(5 + y) * xsize + (xsize - 21 + x)] = c;
}
}
return;
}

2. 显示

shtctl=shtctrl_init(memman,binfo->vram,binfo->scrnx,binfo->scrny);/*建图层管理对象*/
...
sht_win=sheet_alloc(shtctl);/*建图层*/
...
sheet_setbuf(sht_win,buf_win,160,52,-1);/*保存图层申请空间*/
...
make_window8(buf_win,160,52,"counter");/*创建窗口*/
putfonts8_asc(buf_win, 160, 24, 28, COL8_000000, "Welcome");/*窗口内容*/
..
sheet_slide(sht_win, 80, 72);/*移动窗口*/
...
sheet_updown(sht_win,   1);/*窗口为第二层,第一层为背景,第三层为鼠标*/

3. 避免产生闪烁,先将写入vram的内容保存到一个内存块中,所有更新信息将这个内存块修改之后再去更新vram。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: