程序片段:
CClientDC dc(this);
CFootBall ball(&dc);
ball.GetMDC (mdc);
dc.BitBlt (0, 0, ball.nWidth, ball.nHeight, ball.memdc, 0, 0, SRCCOPY);
dc.BitBlt (100, 0, ball.nWidth, ball.nHeight, mdc, 0, 0, SRCCOPY);void CFootBall::GetMDC (CDC* mdc)
{
mdc = memdc;
}
本来应该是有两个图像显示的,但为何这时只有一个图像被显示出来?

解决方案 »

  1.   

    memdc和mdc是什么关系?看不懂。到底mdc是CFootBall的成员变量还是memdc是CFootBall的成员变量?GetMDC()要实现什么目的?mdc又是在哪里定义的?
      

  2.   

    还有,你的代码要实现的目的和:
    dc.BitBlt (0, 0, ball.nWidth, ball.nHeight, ball.memdc, 0, 0, SRCCOPY);
    dc.BitBlt (100, 0, ball.nWidth, ball.nHeight, ball.memdc, 0, 0, SRCCOPY);
    有什么不同吗?
      

  3.   

    程序片段:
    CgameFrame::CgameFrame()
    {
             ...
    CClientDC dc(this);
    CFootBall ball(&dc);
    ball.GetMDC (mdc);
    dc.BitBlt (0, 0, ball.nWidth, ball.nHeight, ball.memdc, 0, 0, SRCCOPY);
    dc.BitBlt (100, 0, ball.nWidth, ball.nHeight, mdc, 0, 0, SRCCOPY);
    }
    void CFootBall::GetMDC (CDC* mdc1)
    {
    mdc1 = memdc;
    }
    memdc是CFootBall的成员变量,经过调试,我发现调用GetMDC函数后,mdc的值未被改变,
    故只能显示一张图像。那到底mdc的值为何不能改为memdc的值呢?
      

  4.   

    程序片段:
    CgameFrame::OnTimer()
    {
             ...
    CClientDC dc(this);
    CFootBall ball(&dc);
    ball.GetMDC (mdc);
    dc.BitBlt (0, 0, ball.nWidth, ball.nHeight, ball.memdc, 0, 0, SRCCOPY);
    dc.BitBlt (100, 0, ball.nWidth, ball.nHeight, mdc, 0, 0, SRCCOPY);
    }
    void CFootBall::GetMDC (CDC* mdc1)
    {
    mdc1 = memdc;
    }
    memdc是CFootBall的成员变量,经过调试,我发现调用GetMDC函数后,mdc的值未被改变,
    故只能显示一张图像。那到底mdc的值为何不能改为memdc的值呢?
      

  5.   

    程序片段:
    CgameFrame::OnTimer()
    {
             ...
    CClientDC dc(this);
    CFootBall ball(&dc);
    ball.GetMDC (mdc);
    dc.BitBlt (0, 0, ball.nWidth, ball.nHeight, ball.memdc, 0, 0, SRCCOPY);
    dc.BitBlt (100, 0, ball.nWidth, ball.nHeight, mdc, 0, 0, SRCCOPY);
    }
    void CFootBall::GetMDC (CDC* mdc1)
    {
    mdc1->m_hDC = memdc->m_hDC;
    }
    这样就能正确显示出两幅图像了
      

  6.   

    问题又来了,如上面那样是能正确显示图像,但在CgameFrame::OnTimer()中,
    要第二次调用dc.BitBlt()时才可显示出图像,为何?