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

画上去的bitmap有时候变黑,必须将窗口重新打开才能继续使用?解决办法

2014-07-23 
画上去的bitmap有时候变黑,必须将窗口重新打开才能继续使用?各位DX,帮忙看看,不知道怎么回事,有时候好用,

画上去的bitmap有时候变黑,必须将窗口重新打开才能继续使用?
各位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]);
        }
}


[解决办法]
在OnPaint里面画图
[解决办法]
GDI资源泄漏,每个GDI资源都要销毁,选进去的(SelectObject)都要选出来。
另外,在OnPaint中绘图,不会引起闪烁。频繁切换图片(绘制背景、绘制前景)才会引起闪烁。
[解决办法]
是不是要
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]);

没有试,不知道对不对

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

热点排行