首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

大家看看小弟我的双缓冲解决屏幕闪动为什么没有效果,十万紧急 (代码可以直接运行)

2012-02-06 
大家看看我的双缓冲解决屏幕闪动为什么没有效果,十万紧急!!! (代码可以直接运行) - C++ Builder / Windows

大家看看我的双缓冲解决屏幕闪动为什么没有效果,十万紧急!!! (代码可以直接运行) - C++ Builder / Windows SDK/API
int   y[880]   ;
        float   x=0;
        int   z=rand();
        for   (int   i=0;i <880;i++)
        {
                y[i]=sin(x+z)*100;
                x=x+3.1415/40;
        }
        TPoint   pot[800];
        int   xx=0;
        int   i=0;

        for   (int   j=0;   j <800;j++)
        {
                pot[j]=Point(xx,y[i]+100);
                xx=xx+1;
                i++;
        }
        COLORREF   BC;
        COLORREF   pc;
        HBRUSH   BrushObject   ;     //画刷
        HPEN   PenObject   ;       //   画笔
        pc=RGB(0,255,0);
        BC=RGB(255,255,255);
        BrushObject=CreateSolidBrush(BC);
        PenObject=CreatePen(PS_SOLID,1,pc)   ;
        HDC   hdc;

        hdc=Form1-> Image1-> Canvas-> Handle   ;
        hMemDC=CreateCompatibleDC(NULL);   //创建虚拟DC
        hBmp=CreateCompatibleBitmap(hdc,600,250);//   创建bitmap
        SelectObject(hMemDC,hBmp);     //   选中   创建的DC
        SelectObject(hMemDC,PenObject);

        FillRect(hMemDC,&kk,BrushObject);   //   刷新位图
        Polyline(hMemDC,pot,799);     //   画图
        BitBlt(hdc,16,8,600,250,hMemDC,0,0,SRCCOPY);     //复制

        DeleteDC(hMemDC);
        DeleteObject(hBmp);
        DeleteObject(BrushObject);


放在定时器事件里     图象一动也不动   郁闷死了   大家帮忙看看呀

[解决办法]
不用这么麻烦搞双缓冲
双缓冲直接用Fom1-> DoubleBuffer=true;就可以了
[解决办法]
不要在画图的函数里频繁的CreateCompatibleDC和DeleteDC,这样反而效率更低。
[解决办法]
> > 我也知道这样不好  但是又不能设为全局变量  没什么好办法呀
为什么不能设为全局变量呢,你不是在用Form1吗,它就是全局变量。
就算不能设为全局变量,也可以设为类的成员变量呀,你不是在用Image1吗。

另外,画不出图象,是因为image对图象重绘有自己的处理。
对于这种情况,你应该用TPaintBox比较好,它的效率比image高。但是一旦它上边的图象被擦除,就不会自己重画上,所以如果有需要的话,你需要在它的WM_PAINT消息里自己重画。
[解决办法]
很多东西并不是单方面的突出就是好,走往一个极端的同时也会产生不同的负面影响.
[解决办法]
以前做过,一般创建两个画板,一个作为拼接画面用,另一个作最终显示用,好象有个网站有代码,我忘了,只有自己找一下。

热点排行