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

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


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

  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. 显示

  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. 为了避免产生闪烁,需要进行很多处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值