4 非矩形窗口(harib26c)
好啦,现在开始我们可以编写应用程序玩玩了!
这里“非矩形”表示“非方块形状”,也就是说我们现在要让窗口的形状为方形以外的其他形状,这通过使用透明色就可以实现。这个例子说明“纸娃娃系统”也能实现这种高级功能哟。
notrec.c
#include "apilib.h"
void HariMain(void)
{
int win;
char buf[150 * 70];
win = api_openwin(buf, 150, 70, 255, "notrec");
api_boxfilwin(win, 0, 50, 34, 69, 255);
api_boxfilwin(win, 115, 50, 149, 69, 255);
api_boxfilwin(win, 50, 30, 99, 49, 255);
for (;;) {
if (api_getkey(1) == 0x0a) {
break; /*按下回车键则break; */
}
}
api_end();
}
我们将透明色指定为255号,然后用这个透明色在窗口中绘制3个方块。于是我们绘制方块的部分就变成了透明的,从结果上说也就画出非矩形的窗口了。
应用程序名称“notrec”是“not rectangle”(非矩形)的缩写。
“make run”的结果如图1,是不是很有意思呢?
1 “make run”的结果如图:某些情况下可能不会显示出图上的结果,出现这种情况时只要移动一下窗口就可以了。这是由于没有考虑到窗口形状变化(增加了透明色)而出现的问题,只要编写一个窗口形状变化时专用的refresh API就可以解决。本书中对于非矩形窗口并没有实现真正意义上的支持,因此没有增加相应的API。
非矩形的窗口?
虽然现在这样还不行,但只要对操作系统方面进行一些修改并支持隐藏窗口标题栏的话,我们就可以绘制出桔子形的窗口,甚至是人形的窗口等各种窗口啦。这多亏了我们前面设计好的图层管理机制呢。