我试图在加载任何其他帧之前将位图图像作为主机的背景但是我没有运气,我缺少什么?
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;
}
答案 0 :(得分:2)
看起来大型机的背景真的不是。大型机主要只是处理:框架。 MDI客户端区域由MDI客户端窗口处理(后者又管理MDI子窗口)。
要更改背景图,请创建MDI Client窗口类(CWnd
的公共衍生物),并在其OnEraseBkgnd
中处理图形。在MainFrame类中创建该类的实例,并在MainFrame的OnCreate
中,告诉您的MDI客户端子类化库存MDI客户端窗口:
myClient.SubclassWindow(m_hWndMDIClient);
答案 1 :(得分:1)
通过子类化提出的方法在最新版本的MFC中不起作用。 但是,幸运的是,为这样的任务设计了一种特殊方式:
CMDIFrameWndEx
,OnEraseMDIClientBackground( CDC* dc )
虚拟方法TRUE
。