c++ - 位图作为 MDI mainfrm 的背景

标签 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;

}

最佳答案

看起来像大型机背景的东西实际上不是。大型机主要只是处理:框架。 MDI 客户区由 MDI 客户窗口处理(该窗口反过来管理 MDI 子窗口)。

要更改背景绘图,您可以创建一个 MDI 客户端窗口类(CWnd 的公共(public)派生类),并在其 OnEraseBkgnd 中处理绘图。在您的 MainFrame 类中创建该类的一个实例,并在您的 MainFrame 的 OnCreate 中,告诉您的 MDI 客户端子类化常用 MDI 客户端窗口:

myClient.SubclassWindow(m_hWndMDIClient);

关于c++ - 位图作为 MDI mainfrm 的背景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25759273/

相关文章:

c++ - 回文之谜: Why an array of size 3 ends up being printed with 5 elements?

java - 位图超出范围错误

Redis位图分割键分割策略

html - CSS 图像不适合屏幕

css - 我可以在 <div> 顶部添加图像而不添加任何 html 标签吗?

c++ - 行列式中的段错误(核心已转储)

c++ - 如何创建指向大小未知的多维数组的指针?

c++ - 即使在 RVO 禁用时定义了 move 构造函数,也会发生对象复制

actionscript-3 - 在 ActionScript3 中嵌入位图

iphone - 带有背景图像的 UITableView 单元格