画上去的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中