我在MID的背景上加了一个图片,用的是一个网上朋友写的类
class CPicture p;
p.Load("123.jpg");
CDC dc;
cd.m_hDc->::FetDC(this->m_hWndMDiClient);
CRect rec;
CetClientRect(&rec);
p.Render(&dc,rec);但是当要重画时它会全部重画, 我怎么才能部分重画那??
或者还有什么别的好的方法在MDI的背景中加入图片!请高手们指教!

解决方案 »

  1.   

    用InvalidateRect(CRect)试试
    CRect是你要重绘的范围
      

  2.   

    重画时用
    CRect rc;
    pDC->GetClipBox(&rc);rc 为无效需重绘区域,只重绘该部分就可以了。
      

  3.   

    我的上面的代码是在MAINFRAM的ONPAIN中写的!我现在就是想得到重画的区域 因为这个方面我刚接触 请各位讲的详细一点好么??
    谢谢了!
    上面的方法试了试 还是不可以 
    不过谢了!
      

  4.   

    现在我已经把图载入到背景中
    我是在MDI下加入的图 在程序开始的时候没有运行view ,界面左边是我添加的一个OUTBAR,右边是一个空白区域,我就是在这个空白区域加的图片
    现在有一个问题,我怎么得到这个空白区域的句柄??
      

  5.   

    在 MainFrame重写PreTranslateMessage函数
    BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
    {
    // TODO: 在此添加专用代码和/或调用基类 if(pMsg->hwnd==m_hWndMDIClient && pMsg->message==WM_PAINT)
    {
    PostMessage(WM_PAINT);
    }
    return CMDIFrameWnd::PreTranslateMessage(pMsg);
    }
    然后加入相应WM_PAINT的函数void CMainFrame::OnPaint()
    { // device context for painting
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CMDIFrameWnd::OnPaint()
    CDC dc;
    dc.m_hDC=::GetDC(m_hWndMDIClient);
    //在这里重画
    ::ReleaseDC(m_hWndMDIClient,dc.m_hDC);
    CMDIFrameWnd::OnPaint();
    }
      

  6.   

    参考MDI背景画图的例子,是子类化实现的.
    http://www.codeproject.com/dialog/mdibackgroundimage.asp
      

  7.   

    这个例子我看了,其实问题的关键是,我的图形不是整个都当成主框架的背景色的,只是一部分为主框架的背景色,另一部分我还有别的控件,所以现在就是怎么取得这一部分的句柄to:nFox18(无知者无畏)
    用了你的方法了,还是不可以!
      

  8.   

    LZ的意思上把一张图贴到主框架的某个位置上?
    如果是的话,BitBlt本身就可以指定要贴到框架上的位置啊!
      

  9.   

    建议你用picture控件,然后在这控件之上加图片就可以了!