我现在要将120张35*35的图片在OnPaint里画出来。。
我用一个循环来画这120张图片,每一次循环都BitBlt一个图片。。
结果发现CPU飚的很高。。
是不是有一种方法,,先把这120张画到内存中,然后在OnPaint里用一个BitBlt就可以实现的方法啊。。
请教啊
这个要怎么实现

解决方案 »

  1.   

    就是空循环也能把CPU飚的很高。你的问题是你需要怎样的画这些小图。需要让程序的主循环停下来,只做需要做的事。CPU才会下来。
      

  2.   

    我现在的思路是 先把这120张画到m_ClintDC中,如果地图没有变化则在OnPaint中直接把m_ClintDC复制到绘画DC中,如果有变化,则更新m_ClintDC的内容,然后在复制到绘画DC中。。
    这样做 我遇到一个问题。。结果是这120张图片显示不出来。。只显示一块黑色的区域
    代码如下
    m_ClintDC.CreateCompatibleDC(pDC);
    //m_ClintDC.SetBkColor(RGB(31,72,82));
    m_ClintDC.SetBkMode(TRANSPARENT);
    HBITMAP bitmap=CreateCompatibleBitmap(m_ClintDC.GetSafeHdc(),COL_COUNT*m_WIDTH+4,ROW_COUNT*m_HEIGHT+4);
    m_ClintDC.SelectObject(bitmap);
    然后在DrawMip()函数中把这120张图画到m_ClintDC中。。代码如下
    CDC tempDC;
    tempDC.CreateCompatibleDC(pDC);
    tempDC.SelectObject(m_bitmap1);//m_bitmap1为这120张图所在的图片    for(int i=0;i<ROW_COUNT;i++)
    for(int j=0;j<COL_COUNT;j++)
    {
    StretchBlt(&m_ClintDC,i,j,m_T_WIDTH,m_T_HEIGHT,&tempDC,0,m_Card[m_MeStation].card[i][j]*m_T_HEIGHT,m_T_WIDTH,m_T_HEIGHT,RGB(255,0,255));
    }然后在OnPaint 中
    StretchBlt(pDC,m_BasePoint.x,m_BasePoint.y,COL_COUNT*m_WIDTH+4,ROW_COUNT*m_HEIGHT+4,&m_ClintDC,0,0,COL_COUNT*m_WIDTH+4,ROW_COUNT*m_HEIGHT+4,RGB(255,255,255));
    结果显示的是一个黑色区域,,那120张小图片没有显示出来
    请问这是哪里出错了啊
      

  3.   

    创建兼容内存位图时的参数不要使用m_ClintDC,因为它还没有自己的兼容位图呢:
    CreateCompitableBitmap(pDC...)
      

  4.   

    听说DIRECTDRAW 效率比较高啊