位图作为MDI mainfrm的背景

时间:2014-09-10 07:07:19

标签: c++ bitmap background mfc mdi

我试图在加载任何其他帧之前将位图图像作为主机的背景但是我没有运气,我缺少什么?

BOOL CMainFrame::OnEraseBkgnd(CDC* pDC)
{
    CBitmap m_cbImage;
    COLORREF m_crBack;
    UINT m_uImage;
    m_crBack = RGB(255, 255, 255);
    m_uImage = IDB_SPLASH;

    if ((m_cbImage.m_hObject == NULL) && (m_uImage>0))
    {
        m_cbImage.LoadBitmap(m_uImage);
        m_bFirst = TRUE;
    }
    else
    {
        if (m_bFirst)
        {
            m_bFirst = FALSE;
        }
    }
    CRect rcClient;
    GetClientRect(rcClient);
    pDC->FillSolidRect(rcClient, m_crBack);
    if (m_cbImage.m_hObject != NULL)
    {
        BITMAP sBitmap;
        m_cbImage.GetBitmap(&sBitmap);
        CSize szImage(sBitmap.bmWidth, sBitmap.bmHeight);
        pDC->DrawState(CPoint(0, 0), szImage, &m_cbImage, DST_BITMAP | DSS_NORMAL);
    }
    return TRUE;

}

2 个答案:

答案 0 :(得分:2)

看起来大型机的背景真的不是。大型机主要只是处理:框架。 MDI客户端区域由MDI客户端窗口处理(后者又管理MDI子窗口)。

要更改背景图,请创建MDI Client窗口类(CWnd的公共衍生物),并在其OnEraseBkgnd中处理图形。在MainFrame类中创建该类的实例,并在MainFrame的OnCreate中,告诉您的MDI客户端子类化库存MDI客户端窗口:

myClient.SubclassWindow(m_hWndMDIClient);

答案 1 :(得分:1)

通过子类化提出的方法在最新版本的MFC中不起作用。 但是,幸运的是,为这样的任务设计了一种特殊方式:

  • 确保您的CMainFrame类继承自CMDIFrameWndEx
  • 覆盖其OnEraseMDIClientBackground( CDC* dc )虚拟方法
  • 您的实施应该返回TRUE