位图作为MDI主窗体的背景

Bitmap as background to MDI mainfrm

本文关键字:窗体 背景 MDI 位图      更新时间:2023-10-16

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

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;
}

大型机的背景看起来确实不是。主机基本上只处理这个问题:框架。MDI客户端区域由MDI客户端窗口处理(该窗口反过来管理MDI子窗口)。

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

myClient.SubclassWindow(m_hWndMDIClient);

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

  • 确保您的CMainFrame类继承自CCD_ 4
  • 覆盖其CCD_ 5虚拟方法
  • 您的实现应该返回TRUE