内存画图的问题.
- C/C++ code
// Get bitmap handle Color backColor; HBITMAP bitmap; m_Document->m_Bitmap->GetHBITMAP(backColor, &bitmap); // Create source dc HDC dc = CreateCompatibleDC(pDC->GetSafeHdc()); HGDIOBJ oldBitmap = SelectObject(dc, bitmap); // Draw current object if (m_pSelectedTool != NULL) { CDC *srcDC = CDC::FromHandle(dc); m_pSelectedTool->Draw(srcDC); // 画一条直线 ReleaseDC(srcDC); } // Draw to screen StretchBlt(pDC->GetSafeHdc(), rect.left, rect.top, rect.Width(), rect.Height(), dc, srcX, srcY, srcWidth, srcHeight, SRCCOPY); // Release resource SelectObject(dc, oldBitmap); DeleteDC(dc); DeleteObject(bitmap);
我这段代码在窗口上画一条直线.
但我保存m_Document->m_Bitmap时,却没有这条直线.有谁知道吗?
[解决办法]
去掉DeleteObject(bitmap);
[解决办法]
又是API, 又是MFC, 自己把自己都绕进去了...
CDC *srcDC = CDC::FromHandle(dc);
FromHandle后的DC不用Release释放
DeleteObject(bitmap); m_Document->m_Bitmap就用一次? 删完了可就没了
[解决办法]
还要确保m_pSelectedTool确实不为NULL
[解决办法]
好乱啊,好像GDI+和GDI混用的样子
貌似有点问题,
你刚画完线就ReleaseDC?
而且释放之后还在重复使用dc,(那个StretchBlt是给小窗口上绘制吧?)