Re: How do I display an image as the background in CMDIFrameWnd
You will have to subclass the m_hWndMDIClient of the CMDIFrameWnd with your
own window and then catch the WM_ERASEBKGND and WM_PAINT messages there.
So create class that inherits from CWnd, lets call it CClientWnd. Then
subclass m_hWndMIDClient in the Frame's OnCreateClient method. Take over
the WM_ERASEBKGND message and paint your bitmap there and return TRUE. If
you bitmap won't takeup the entire client area then you might want to it in
WM_PAINT.
class CClientWnd : public CWnd
{
DECLARE_DYNAMIC(CClientWnd)
public:
CClientWnd();
virtual ~CClientWnd();
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
};
BEGIN_MESSAGE_MAP(CClientWnd, CWnd)
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
BOOL CClientWnd::OnEraseBkgnd(CDC* pDC)
{
//draw bitmap here
pDC->BitBlt(....);
return TRUE;
}
class CMainFrame : public CMDIFrameWnd
{
private:
CClientWnd m_Client;
};
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext*
pContext)
{
if (CMDIFrameWnd::OnCreateClient(lpcs, pContext))
{
m_Client.SubclassWindow(m_hWndMDIClient);
return TRUE;
}
return FALSE;
}
AliR.
"Bruce" <bwolven@nospam.nospam> wrote in message
news:uEi4fKKbHHA.4720@TK2MSFTNGP04.phx.gbl...
I have a VC++ MFC 7.1 application and I am looking for a way to display a
background image in the application's frame window behind any child windows
that may be displayed. It is a CMDIFrameWnd derived class.
I have found a couple of examples that are to change the background color
in the CMyMDIFrameWnd::OnEraseBkgnd() handler.
But it doesn't seem to work. The background color always remains the same.
Is there something that I am missing?
I am running on Windows XP Professional.
--
Thanks,
Bruce