4 非矩形窗口(harib26c)

好啦,现在开始我们可以编写应用程序玩玩了!

这里“非矩形”表示“非方块形状”,也就是说我们现在要让窗口的形状为方形以外的其他形状,这通过使用透明色就可以实现。这个例子说明“纸娃娃系统”也能实现这种高级功能哟。

notrec.c

  1. #include "apilib.h"
  2. void HariMain(void)
  3. {
  4. int win;
  5. char buf[150 * 70];
  6. win = api_openwin(buf, 150, 70, 255, "notrec");
  7. api_boxfilwin(win, 0, 50, 34, 69, 255);
  8. api_boxfilwin(win, 115, 50, 149, 69, 255);
  9. api_boxfilwin(win, 50, 30, 99, 49, 255);
  10. for (;;) {
  11. if (api_getkey(1) == 0x0a) {
  12. break; /*按下回车键则break; */
  13. }
  14. }
  15. api_end();
  16. }

我们将透明色指定为255号,然后用这个透明色在窗口中绘制3个方块。于是我们绘制方块的部分就变成了透明的,从结果上说也就画出非矩形的窗口了。

应用程序名称“notrec”是“not rectangle”(非矩形)的缩写。

“make run”的结果如图1,是不是很有意思呢?

1 “make run”的结果如图:某些情况下可能不会显示出图上的结果,出现这种情况时只要移动一下窗口就可以了。这是由于没有考虑到窗口形状变化(增加了透明色)而出现的问题,只要编写一个窗口形状变化时专用的refresh API就可以解决。本书中对于非矩形窗口并没有实现真正意义上的支持,因此没有增加相应的API。

4 非矩形窗口(harib26c) - 图1

非矩形的窗口?

虽然现在这样还不行,但只要对操作系统方面进行一些修改并支持隐藏窗口标题栏的话,我们就可以绘制出桔子形的窗口,甚至是人形的窗口等各种窗口啦。这多亏了我们前面设计好的图层管理机制呢。