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

内存画图的有关问题

2012-03-08 
内存画图的问题.C/C++ code// Get bitmap handleColorbackColorHBITMAP bitmapm_Document-m_Bitmap-Ge

内存画图的问题.

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是给小窗口上绘制吧?)



热点排行