我是说是不是CPU占用太大?有没有简单方法?

解决方案 »

  1.   

    用GDI当然慢了,用WannaPlayDIB图形库吧,直接操作内存,绝对比你现在的算法速度高一个数量级以上(我有信心高两个数量级:),当然算法也要做一些优化,最好不要用浮点数。
    DIB库现在还没提供画线函数,但你画的都是标准垂直线,用WannaPlayDIB的DIB_Filter足够了。
    http://wannaplay.51.net/interfac.html
    [email protected]
      

  2.   

    我记得在《VC++技术内幕》中讲了怎么用DIB的
      

  3.   

    大家能否简单解释一下DIB如何使用?我就是想在一个 RECT 上用给定的两种颜色画出渐变色,就跟WIN98/2000/ME等的窗口标题栏一模一样。
      

  4.   

    用位图,在内存中生成一个256色的位图,位图像素的值从0到255,0号颜色就是color1,255号颜色就是color2,生成中间各颜色的RGB值赋给调色板里的相应的序号颜色,再StretchDIBits就OK了。
    void CreatePalette(COLORREF c1, COLORREF c2)
    {
        int    r1, g1, b1, r2, g2, b2;
        RGBQUAD    *p = lpbi->bmiColors;
        r1 = GetRValue(c1);
        g1 = GetGValue(c1);
        b1 = GetBValue(c1);
        r2 = GetRValue(c2);
        g2 = GetGValue(c2);
        b2 = GetBValue(c2);
        float    r, g, b;
        r = (r2-r1)/256.0f;
        g = (g2-g1)/256.0f;
        b = (b2-b1)/256.0f;
        for(int i = 0; i < 256; i++)
        {
            p[i].rgbRed = (int)(r1+r*i);
            p[i].rgbGreen = (int)(g1+g*i);
            p[i].rgbBlue = (int)(b1+b*i);
        }
    }
      

  5.   

    1.老兄我也曾遇到过与你类似的问题:我当时的解决方案如下:
    a。 首先在内存中画好,然后再拷贝到视图上。方法上面各位有所介绍。
    b。 有一个API函数。指定三点的颜色,可以实现此区域内的颜色渐变。若是两点
        也可。具体函数名我记不太清。等我查到以后再通知你。(函数名中含有“Fill”)
      

  6.   

    老是出错:MyView.obj : error LNK2001: unresolved external symbol __imp__GradientFill@24
    Release/aaa.exe : fatal error LNK1120: 1 unresolved externals何故? 头文件我已经包含。。
      

  7.   

    用GradientFill() 老是出错:MyView.obj : error LNK2001: unresolved external symbol __imp__GradientFill@24
    Release/aaa.exe : fatal error LNK1120: 1 unresolved externals何故? 头文件我已经包含。。
      

  8.   

    在程序中加入#pragma comment(lib, MSIMG32.LIB)或者加入在Project Set里,但是这个函数只能用在2000和98。如果考虑兼容性还是自己画,gamedragon的方法似乎不错,或者考虑jdzcy的方法,创建内存DC,SetDIBits。
    如果你只是想自己画Caption,则可以参看DrawFrameControl
      

  9.   

    更正#pragma comment(lib, "MSIMG32.LIB")
      

  10.   

    另一个问题:如何把 COLORREF 的R、G、B 转换成 COLOR16,也就是USHORT?GetRValue()得到的是 BYTE!