各位DX,帮忙看看,不知道怎么回事,有时候好用,有时候就是全黑,bitmap显示不正常。刚学vc,有点挠头...
void CTestDlg::DrawPic()
{
    HDC hDC[4],hMemDC[4];
    HBITMAP hBitmap[4];
    BITMAP bm;    hDC[0] = ::GetDC(::GetDlgItem(GetSafeHwnd(),IDC_STATIC1));
    hMemDC[0] = CreateCompatibleDC(hDC[0]);    hDC[1] = ::GetDC(::GetDlgItem(GetSafeHwnd(),IDC_STATIC2));
    hMemDC[1] = CreateCompatibleDC(hDC[1]);    hDC[2] = ::GetDC(::GetDlgItem(GetSafeHwnd(),IDC_STATIC3));
    hMemDC[2] = CreateCompatibleDC(hDC[2]);    hDC[3] = ::GetDC(::GetDlgItem(GetSafeHwnd(),IDC_STATIC4));
    hMemDC[3] = CreateCompatibleDC(hDC[3]);    for (int i=0; i<4; i++)
    {
        if (m_cColor[i] == COLOR_GREEN)
          hBitmap[i] = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP2));
        else if (m_cColor[i] == COLOR_BLUE)
   hBitmap[i] = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
        else
   hBitmap[i] = ::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP3)); SelectObject(hMemDC[i],hBitmap[i]);
GetObject(hBitmap[i],sizeof(bm), &bm);
BitBlt(hDC[i],0,0,bm.bmWidth,bm.bmHeight,hMemDC[i],0,0,SRCCOPY);
::ReleaseDC(GetSafeHwnd(),hDC[i]);
DeleteDC(hMemDC[i]);
    }
}

解决方案 »

  1.   

    TO:wltg2001(红猪)
    我画在了static text,主要是我了防止我自己固定坐标,而防止显示器分辩率变化而使图片显示位置乱。我设置定时器定时刷新,是可以正常显示的。只是不知道什么原因,程序运行一会,我的程序窗口上的控件就会变黑,如果不关闭窗口,则程序无法继续工作,我怀疑画图这里出现问题TO:zengwenfu() 
    在onpaint里刷新,每次调用时,整个窗口都会跟着刷新,可能会有点闪吧
      

  2.   

    GDI资源泄漏,每个GDI资源都要销毁,选进去的(SelectObject)都要选出来。
    另外,在OnPaint中绘图,不会引起闪烁。频繁切换图片(绘制背景、绘制前景)才会引起闪烁。
      

  3.   

    TO:Mackz(在相互) 
    老大,你能在我的代码的基础上告诉我如何修改吗?我是个mfc的初学者,谢谢了,我现在也知道这段代码有问题,不知道怎么改,更不知道原因?
      

  4.   

    是不是要
    BOOL DeleteObject(
    HGDIOBJ hObject
    );
              SelectObject(hMemDC[i],hBitmap[i]);
    GetObject(hBitmap[i],sizeof(bm), &bm);
    BitBlt(hDC[i],0,0,bm.bmWidth,bm.bmHeight,hMemDC[i],0,0,SRCCOPY);
    ::ReleaseDC(GetSafeHwnd(),hDC[i]);
             DeleteObject(hBitmap[i]);
    DeleteDC(hMemDC[i]);没有试,不知道对不对
      

  5.   

    将加载位图的工作放在另一个地方,比如初始化中完成,不要每一刷一次加载一次,另外画图当然要画在OnPaint中