上QQ阅读APP看书,第一时间看更新
8 显示鼠标指针(harib02h)
估计后面的开发速度会更快,那就赶紧趁着这势头再描画一下鼠标指针吧。思路跟显示字符差不多,程序并不是很难。
首先,将鼠标指针的大小定为16×16。这个定下来之后,下面就简单了。先准备16×16=256字节的内存,然后往里面写入鼠标指针的数据。我们把这个程序写在init_mouse_cursor8里。
void init_mouse_cursor8(char *mouse, char bc) /* 准备鼠标指针(16×16)*/ { static char cursor[16][16] = { "**************..", "*OOOOOOOOOOO*...", "*OOOOOOOOOO*....", "*OOOOOOOOO*.....", "*OOOOOOOO*......", "*OOOOOOO*.......", "*OOOOOOO*.......", "*OOOOOOOO*......", "*OOOO**OOO*.....", "*OOO*..*OOO*....", "*OO*....*OOO*...", "*O*......*OOO*..", "**........*OOO*.", "*..........*OOO*", "............*OO*", ".............***" }; int x, y; for (y = 0; y < 16; y++) { for (x = 0; x < 16; x++) { if (cursor[y][x] == '*') { mouse[y * 16 + x] = COL8_000000; } if (cursor[y][x] == 'O') { mouse[y * 16 + x] = COL8_FFFFFF; } if (cursor[y][x] == '.') { mouse[y * 16 + x] = bc; } } } return; }
变量bc是指back-color,也就是背景色。
要将背景色显示出来,还需要作成下面这个函数。其实很简单,只要将buf中的数据复制到vram中去就可以了。
void putblock8_8(char *vram, int vxsize, int pxsize, int pysize, int px0, int py0, char *buf, int bxsize) { int x, y; for (y = 0; y < pysize; y++) { for (x = 0; x < pxsize; x++) { vram[(py0 + y) * vxsize + (px0 + x)] = buf[y * bxsize + x]; } } return; }
里面的变量有很多,其中vram和vxsize是关于VRAM的信息。他们的值分别是0xa0000和320。pxsize和pysize是想要显示的图形(picture)的大小,鼠标指针的大小是16×16,所以这两个值都是16。px0和py0指定图形在画面上的显示位置。最后的buf和bxsize分别指定图形的存放地址和每一行含有的像素数。bxsize和pxsize大体相同,但也有时候想放入不同的值,所以还是要分别指定这两个值。
接下来,只要使用以下两个函数就行了。
init_mouse_cursor8(mcursor, COL8_008484); putblock8_8(binfo->vram, binfo->scrnx, 16, 16, mx, my, mcursor, 16);
也不知能不能正常运行,试试看。……好,能运行!