http://blog.csdn.net/ltbylc/article/details/8309257
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. 为了避免产生闪烁,需要进行很多处理