WINCE 下的wine32程序
void UserBackCoinDlg::OnPaint(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ PAINTSTRUCT paint;
HDC hDC = ::BeginPaint(hWndDlg, &paint); RECT rcClient;
::GetClientRect(hWndDlg, &rcClient); // 取得客户区大小 WCHAR strFileName[128];
switch (m_nBackBmpIndex)
{
case 0:
swprintf(strFileName, _T("%sPicture\\userbackcoin.bmp"), g_strAppPath);
break;
case 1:
swprintf(strFileName, _T("%sPicture\\backingcoin.bmp"), g_strAppPath);
break;
case 2:
swprintf(strFileName, _T("%sPicture\\cannotbackcoinanymore.bmp"), g_strAppPath);
break;
case 3:
swprintf(strFileName, _T("%sPicture\\backcoinerror.bmp"), g_strAppPath);
break;
case 4:
swprintf(strFileName, _T("%sPicture\\backcoinblock.bmp"), g_strAppPath);
case 5:
swprintf(strFileName, _T("%sPicture\\powererror.bmp"), g_strAppPath);
break;
} HBITMAP hBitmap = (HBITMAP)SHLoadDIBitmap(strFileName);
HDC hBackDC = NULL;
hBackDC = CreateCompatibleDC(NULL);
SelectObject(hBackDC, hBitmap); ::BitBlt(m_hMemDC,
0, 0,
rcClient.right, rcClient.bottom,
hBackDC,
0, 0,
SRCCOPY); ::BitBlt(hDC,
0, 0,
rcClient.right, rcClient.bottom,
m_hMemDC,
0, 0,
SRCCOPY);
DeleteObject(hBitmap);
DeleteDC(hBackDC);
::EndPaint(hWndDlg, &paint);
}为什么刷新100下左右,没图像了,有时候是白的有时候是黑的。
GDI没泄露吧?
void UserBackCoinDlg::OnPaint(HWND hWndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{ PAINTSTRUCT paint;
HDC hDC = ::BeginPaint(hWndDlg, &paint); RECT rcClient;
::GetClientRect(hWndDlg, &rcClient); // 取得客户区大小 WCHAR strFileName[128];
switch (m_nBackBmpIndex)
{
case 0:
swprintf(strFileName, _T("%sPicture\\userbackcoin.bmp"), g_strAppPath);
break;
case 1:
swprintf(strFileName, _T("%sPicture\\backingcoin.bmp"), g_strAppPath);
break;
case 2:
swprintf(strFileName, _T("%sPicture\\cannotbackcoinanymore.bmp"), g_strAppPath);
break;
case 3:
swprintf(strFileName, _T("%sPicture\\backcoinerror.bmp"), g_strAppPath);
break;
case 4:
swprintf(strFileName, _T("%sPicture\\backcoinblock.bmp"), g_strAppPath);
case 5:
swprintf(strFileName, _T("%sPicture\\powererror.bmp"), g_strAppPath);
break;
} HBITMAP hBitmap = (HBITMAP)SHLoadDIBitmap(strFileName);
HDC hBackDC = NULL;
hBackDC = CreateCompatibleDC(NULL);
SelectObject(hBackDC, hBitmap); ::BitBlt(m_hMemDC,
0, 0,
rcClient.right, rcClient.bottom,
hBackDC,
0, 0,
SRCCOPY); ::BitBlt(hDC,
0, 0,
rcClient.right, rcClient.bottom,
m_hMemDC,
0, 0,
SRCCOPY);
DeleteObject(hBitmap);
DeleteDC(hBackDC);
::EndPaint(hWndDlg, &paint);
}为什么刷新100下左右,没图像了,有时候是白的有时候是黑的。
GDI没泄露吧?
CRect rctClient; //对话框客户区大小
GetClientRect(&rctClient);
m_rctDraw = rctClient; CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap memBitmap;
memBitmap.CreateCompatibleBitmap(&dc,rctClient.Width(),rctClient.Height());
memDC.SelectObject(&memBitmap);
CFont font;
font.CreateFont(g_font.GraphFontSize,0,0,0,FW_NORMAL,FALSE,FALSE,FALSE,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH|FF_SWISS,g_font.GraphFontName);
//自绘内容
dc.BitBlt(0,0,m_rctDraw.Width(),m_rctDraw.Height(),&memDC,0,0,SRCCOPY); }
brush.DeleteObject();
font.DeleteObject();
memBitmap.DeleteObject();
memDC.DeleteDC();
将一个位图选到设备上以后,删除时要先把它选出来,在删吗?
不是选出来
而是做一下恢复
另外
win32我不熟
不过好像没见你释放hDC
hBackDc已经释放掉了。
dc = beginpaint();
endpaint();这个dc也要释放吗?
具体的我不清楚
在MFC中这个相当于CPaintDC吧
这个是自动处理的
不用我们关心
不过它释没释放我也不太清楚
感觉应该释放吧
我有个2440,64RAM 的,给个工程我运行看看会不会运行一会儿就不够内存.
是因为那个 位图 被DC选了,所以没有删成功,等于删DC后就没有删位图是吗?
我一直用MFC,都没有释放GDI对象的概念.