做了个WINBGI图形小库

我想把GDI的东西包装成BGI,记得吗,就是TC2里的图形库。昨天一起来就开始写,干到半夜终于完成了。可以这样画图,很简单的:

#include  " winbgi.h "

int  main( void )
{
  bgi_init (
" game " 400 400 ); /*初始化窗口的标题,宽和高*/
  outtextxy (
100 100 " 你好 " );
  circle (
100 100 50 );
  bgi_swapbuffer (); /*从内存交换到屏幕*/
  bgi_kill ();
  
return   0 ;
}



除了bgi_swapbuffer和用bgi_init,bgi_kill代替initgraphics之外,其他函数跟tc2 bgi的完全相同。钟情于BGI绘图的同学可以拿来玩玩,可以看作是windows版的仿真。

一开始最难的是用标准的main包装WinMain,我就看看glut里面如何做到这点。原来很简单,只不过是把winmain的东西抽出来而已,特殊的是hInstance是通过GetModuleHandle (NULL)获得的,调用win api需要加连接参数-mwindows。

然后又发现一个问题,如果每个图形都是直接画到屏幕上的话,那出现WM_PAINT消息的时候屏幕的东西就会被擦掉。这才明白ogl里为什么要用swapbuffers了,于是就查swapbuffers的实现,结果到现在都没有找到。但思路是清楚的,就是先全部画到内存再blit到屏幕。终于不负有心人:

_gdc  =  GetDC (hwnd);
SetBkMode (_gdc, TRANSPARENT);
_mdc 
=  CreateCompatibleDC (_gdc);
_hbm 
=  CreateCompatibleBitmap (_gdc, _winwidth, _winheight);   /*  原来需要这两句  */
SelectObject (_mdc, _hbm);
BitBlt (_mdc, 
0 0 , rc.right, rc.bottom, _gdc,  0 0 , SRCCOPY);
但是因为窗口在初始化的时候会发WM_PAINT,就不用写bgi_swapbuffer了。

对了,我只在devcpp上试过。
试玩下载 

转载于:https://www.cnblogs.com/euclid/archive/2006/09/11/500799.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值