m_MemDC是一个类成员变量,CDC m_MemDC,
下面函数里的mdc进行SelectObject之后不知道该如何处理了,
m_MemDC.StretchBlt(rc->left,rc->top,rc->right-rc->left,rc->bottom-rc->top,               &mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
以上这部分代码没把我想要的位图画到内存里去,谁指点一下?谢谢了!
void CMyDlg::UpdateMemDC(void)
{
    CPaintDC dc(this);
    CDC mdc;    
    mdc.CreateCompatibleDC(NULL);
    for (int i=0; i<Y_TOTAL_BLOCKS; i++)
    {
        for (int j=0; j<X_TOTAL_BLOCKS; j++)
        {
            int state = m_blockMatrix[i][j].m_state;
            BITMAP bm;
            switch(state)
            {
            case ST_EMPTY:
                mdc.SelectObject(m_bmpEmpty);
                m_bmpEmpty.GetBitmap(&bm);
                break;
            case ST_DOUBT:
                mdc.SelectObject(m_bmpDoubt);
                m_bmpDoubt.GetBitmap(&bm);
                break;
            case ST_BOMB:
                mdc.SelectObject(m_bmpBomb);
                m_bmpBomb.GetBitmap(&bm);
                break;
            case ST_UNKNOWN:
                mdc.SelectObject(m_bmpUnknown);
                m_bmpUnknown.GetBitmap(&bm);
                break;
            case ST_ERROR:
                mdc.SelectObject(m_bmpError);
                m_bmpError.GetBitmap(&bm);
                break;
            default:
                break;
            }
            LPRECT rc = &m_blockMatrix[i][j].m_rect;
            m_MemDC.StretchBlt(rc->left,rc->top,rc->right-rc->left,rc->bottom-rc->top,
                &mdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
        }
    }    CRect rect;
    GetClientRect(&rect);
    dc.BitBlt(rect.left,rect.top,rect.Width(),rect.Height(),&m_MemDC,
        0,0,SRCCOPY);

解决方案 »

  1.   

    http://blog.csdn.net/bobob/archive/2005/12/29/565188.aspx
      

  2.   

    应该是m_MemDC的问题,我以前遇到过相似的问题,是这样的,
    显示第一张图的时候,使用memory dc ,SelectBitmap 改变其大小,然后StretchBlt到屏幕,
    当我紧接着再SelectBitmap一副比较小的位图时,StretchBlt到屏幕,显示的就是错误的.
    所以我不得不在第二次SelectBitmap之前先DeleteDC,再CreateCompatibleDC.
    出现这种问题,我想应该是内存设备的大小影响的,后来也没再研究
    谁知道怎么回事,给解答下啊....
      

  3.   

    你的m_MemDC什么时候创建的?怎么创建的?
      

  4.   

    m_MemDC是dialog的一个类成员变量,放在OnInitDialog函数中初始化
    m_MemDC.CreateCompatibleDC(NULL);
    CRect rect;
    GetClientRect(&rect);
    m_Bmp.CreateCompatibleBitmap(&m_MemDC,BLOCK_WIDTH*X_TOTAL_BLOCKS,BLOCK_WIDTH*Y_TOTAL_BLOCKS);
    ::SelectObject(m_MemDC.GetSafeHdc(),m_Bmp);
    m_MemDC.FillSolidRect(0,0,BLOCK_WIDTH*X_TOTAL_BLOCKS,BLOCK_WIDTH*Y_TOTAL_BLOCKS,0x00ffffff);
      

  5.   

    没有把m_Bmp Delete吧?DeleteObject掉m_Bmp 也会有问题