C++ 作为MDI mainfrm背景的位图
我正在尝试在加载任何其他帧之前将位图图像作为主机的背景,但我没有任何运气,我缺少了什么C++ 作为MDI mainfrm背景的位图,c++,bitmap,background,mfc,mdi,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
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子窗口) 要更改背景图形,请创建一个MDI客户端窗口类(CWnd的公共派生类),并在其
OnEraseBkgnd
中处理该图形。在大型机类中创建该类的实例,并在大型机的OnCreate
中,告诉MDI客户端对stock MDI client窗口进行子类化:
myClient.SubclassWindow(m_hWndMDIClient);
看起来像大型机背景的东西实际上不是。大型机主要处理的就是:框架。MDI客户端区域由MDI客户端窗口处理(MDI客户端窗口反过来管理MDI子窗口) 要更改背景图形,请创建一个MDI客户端窗口类(CWnd的公共派生类),并在其
OnEraseBkgnd
中处理该图形。在大型机类中创建该类的实例,并在大型机的OnCreate
中,告诉MDI客户端对stock MDI client窗口进行子类化:
myClient.SubclassWindow(m_hWndMDIClient);
通过子类化提出的方法在最新版本的MFC中不起作用。 但幸运的是,我们为这项任务设计了一种特殊的方式:
- 确保您的CMInframe类继承自
CMDIFrameWndEx
- 重写其
virtual方法OnEraseMDIClientBackground(CDC*dc)
- 您的实现应该返回
TRUE
- 确保您的CMInframe类继承自
CMDIFrameWndEx
- 重写其
virtual方法OnEraseMDIClientBackground(CDC*dc)
- 您的实现应该返回
TRUE
- 通过子类化提出的方法在最新版本的MFC中不起作用。
但幸运的是,我们为这项任务设计了一种特殊的方式: