我在MFC的多文档视图中给主界面加载了一个位图,运行的时候显示位图,但是我最小化后再最大化的时候位图就没了,我得晃动晃动才能再出现位图。怎么解决啊?怎么能在最小化后再最大化的时候依然显示位图。

解决方案 »

  1.   

    重绘啊!!这个你放在 OnPaint()中绘制
      

  2.   

    应该是你重绘的代码有问题,在OnPaint()中重绘,代码贴出来。
      

  3.   

    你说的主界面是View类吗?是的话,OnDraw中写绘制代码,这样每次重绘的时候就会执行的
      

  4.   

    我觉得不像是在View类里写的...不然不会出现这样的问题哦。。
      

  5.   

    把你绘图的代码放到OnDraw函数中
      

  6.   

    似乎你是想在MDIClient窗口画图?参考下这个吧http://hi.baidu.com/changcarter/blog/item/0d3b499b6b26dc196e068c38.html
      

  7.   

    如果是单文档的程序,可以在C~~View类中的OnDraw(..)函数中去添加画图片的代码...
      

  8.   

    如果是对话框的话,可以在C~~Dlg类中的OnPaint()函数中去画这个图片..
      

  9.   

    void CMainFrame::OnPaint()
    {
    //CPaintDC dc(this); // device context for painting
    CDC dc, memdc;
    dc.m_hDC=::GetDC(this->m_hWndMDIClient);
    CRect rect;
    CBitmap bitmap;
    BITMAP szbitmap;
    bitmap.LoadBitmap(IDB_MAP);
    bitmap.GetObject(sizeof(BITMAP),&szbitmap);
    CSize size(szbitmap.bmWidth,szbitmap.bmHeight);
    memdc.CreateCompatibleDC(&dc);
    CBitmap *oldbitmap=memdc.SelectObject(&bitmap);
    GetClientRect(&rect);
    StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(),
    memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY);
    memdc.SelectObject(oldbitmap);
    memdc.DeleteDC();
    dc.DeleteDC();
    CMDIFrameWnd::OnPaint();
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CMDIFrameWndEx::OnPaint()
    }
    这是OnPaint中的代码,是在mainfrm里的。
      

  10.   

    void CMainFrame::OnPaint()
    {
    //CPaintDC dc(this); // device context for painting
    CDC dc, memdc;
    dc.m_hDC=::GetDC(this->m_hWndMDIClient);
    CRect rect;
    CBitmap bitmap;
    BITMAP szbitmap;
    bitmap.LoadBitmap(IDB_MAP);
    bitmap.GetObject(sizeof(BITMAP),&szbitmap);
    CSize size(szbitmap.bmWidth,szbitmap.bmHeight);
    memdc.CreateCompatibleDC(&dc);
    CBitmap *oldbitmap=memdc.SelectObject(&bitmap);
    GetClientRect(&rect);
    StretchBlt(dc.m_hDC,0,0,rect.Width(),rect.Height(),
    memdc.m_hDC,0,0,size.cx,size.cy,SRCCOPY);
    memdc.SelectObject(oldbitmap);
    memdc.DeleteDC();
    dc.DeleteDC();
    CMDIFrameWnd::OnPaint();
    // TODO: 在此处添加消息处理程序代码
    // 不为绘图消息调用 CMDIFrameWndEx::OnPaint()
    }
    这是OnPaint中的代码,是在mainfrm里的。
      

  11.   


    CMainFrame中的大块灰色不是CMainFrame自己本身,而是CMainFrame包含的一个客户窗口MDIClient,客户窗口覆盖了View窗口能显示的区域,你又不能重载操作客户窗口MDIClient
      

  12.   

    OnPaint 里贴图,不然一刷新就没了