As Ajay pointed out I wasn't talking about the child views, m_hWndMDIClient
is different than the client views. The client MDIClient that I was talking
about is the center (gray) part of the frame. You see, the frame window is
the toolbars, the status bar and all of that. It has a separate window
handle for each one of these components.
must add does nothing by default).
AliR.
I saw this example but it didn't make sense to me.
Why does the erase background on the child window paint the frame?
I'm not trying to change the background of the client window that gets
open, only the MDI frame window.
If that's the way it must be done, why can't I just add a WM_ERASEBKGND
handler to the child class to do the same thing?
Is the framework getting in the way?
Also, will this method work with VS2005 since we are in the process of
moving our source to it?
--
Thanks,
Bruce
"AliR (VC++ MVP)" <AliR@online.nospam> wrote in message
news:FgzMh.521$rO7.19@newssvr25.news.prodigy.net...
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