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

http://blog.csdn.net/ltbylc/article/details/8309257


1. 窗口的绘制,与鼠标绘制类似

[cpp] view plain copy
  1. void make_window8(unsigned char *buf, int xsize, int ysize, char *title)  
  2. {  
  3.     static char closebtn[14][16] = {  
  4.         "OOOOOOOOOOOOOOO@",  
  5.         "OQQQQQQQQQQQQQ$@",  
  6.         "OQQQQQQQQQQQQQ$@",  
  7.         "OQQQ@@QQQQ@@QQ$@",  
  8.         "OQQQQ@@QQ@@QQQ$@",  
  9.         "OQQQQQ@@@@QQQQ$@",  
  10.         "OQQQQQQ@@QQQQQ$@",  
  11.         "OQQQQQ@@@@QQQQ$@",  
  12.         "OQQQQ@@QQ@@QQQ$@",  
  13.         "OQQQ@@QQQQ@@QQ$@",  
  14.         "OQQQQQQQQQQQQQ$@",  
  15.         "OQQQQQQQQQQQQQ$@",  
  16.         "O$$$$$$$$$$$$$$@",  
  17.         "@@@@@@@@@@@@@@@@"  
  18.     };  
  19.     int x, y;  
  20.     char c;  
  21.     boxfill8(buf, xsize, COL8_C6C6C6, 0,         0,         xsize - 1, 0        );  
  22.     boxfill8(buf, xsize, COL8_FFFFFF, 1,         1,         xsize - 2, 1        );  
  23.     boxfill8(buf, xsize, COL8_C6C6C6, 0,         0,         0,         ysize - 1);  
  24.     boxfill8(buf, xsize, COL8_FFFFFF, 1,         1,         1,         ysize - 2);  
  25.     boxfill8(buf, xsize, COL8_848484, xsize - 2, 1,         xsize - 2, ysize - 2);  
  26.     boxfill8(buf, xsize, COL8_000000, xsize - 1, 0,         xsize - 1, ysize - 1);  
  27.     boxfill8(buf, xsize, COL8_C6C6C6, 2,         2,         xsize - 3, ysize - 3);  
  28.     boxfill8(buf, xsize, COL8_000084, 3,         3,         xsize - 4, 20       );  
  29.     boxfill8(buf, xsize, COL8_848484, 1,         ysize - 2, xsize - 2, ysize - 2);  
  30.     boxfill8(buf, xsize, COL8_000000, 0,         ysize - 1, xsize - 1, ysize - 1);  
  31.     putfonts8_asc(buf, xsize, 24, 4, COL8_FFFFFF, title);  
  32.     for (y = 0; y < 14; y++) {  
  33.         for (x = 0; x < 16; x++) {  
  34.             c = closebtn[y][x];  
  35.             if (c == '@') {  
  36.                 c = COL8_000000;  
  37.             } else if (c == '$') {  
  38.                 c = COL8_848484;  
  39.             } else if (c == 'Q') {  
  40.                 c = COL8_C6C6C6;  
  41.             } else {  
  42.                 c = COL8_FFFFFF;  
  43.             }  
  44.             buf[(5 + y) * xsize + (xsize - 21 + x)] = c;  
  45.         }  
  46.     }  
  47.     return;  
  48. }  

2. 显示

[html] view plain copy
  1. shtctl=shtctrl_init(memman,binfo->vram,binfo->scrnx,binfo->scrny);/*建图层管理对象*/  
  2. ...  
  3. sht_win=sheet_alloc(shtctl);/*建图层*/  
  4. ...  
  5. sheet_setbuf(sht_win,buf_win,160,52,-1);/*保存图层申请空间*/  
  6. ...  
  7. make_window8(buf_win,160,52,"counter");/*创建窗口*/  
  8. putfonts8_asc(buf_win, 160, 24, 28, COL8_000000, "Welcome");/*窗口内容*/  
  9. ..  
  10. sheet_slide(sht_win, 80, 72);/*移动窗口*/  
  11. ...  
  12. sheet_updown(sht_win,   1);/*窗口为第二层,第一层为背景,第三层为鼠标*/  

3. 为了避免产生闪烁,需要进行很多处理

你可能感兴趣的:(读书笔记《30天自制操作系统》day11)