Re: Problem with SelectObject in WM_ERASEBKGND
"Nash" <jeevs007@gmail.com> wrote in message
news:1182874920.143214.235250@w5g2000hsg.googlegroups.com...
Pls provide some suggestions or alternative way for doing this.
Schematicaly, if this is happening in a "view" (a class derived from CView,
CScrollView etc):
First use the usual MFC handlers for messages rather than explicitly
switching on messages.
1 Have a CBitmap member of your class - eg CBitmap m_bmp.
2 OnInitialUpdate()
Make the bitmap m_bmp. [You'll need a device context if you're drawing it,
but release the DC when you have finished - do not store a device context. ]
Typically the steps are:
EITHER
{
Load bitmap m_bmp from resources
}
OR
{
Draw it as follows
Use GetDC() to get a DC compatible with the screen. One method is
CWnd *pWnDesk = CWnd::GetDesktopWindow();
CDC *pDC = pWnDesk->GetDC();
You only need this in order to be able to create your own compatible DC.
So create a compatible DC to actually use:
CDC MemDC;
MemDC.CreateCompatibleDC( pDC ) ;
Create the bitmap of the desired size:
m_bmp.CreateCompatibleBitmap( &MemDC, .... );
Select m_bmp into MemDC
Draw onto MemDC
Select the old bitmap (and any other old drawing tools) back into MemDC
Delete the MemDC
pWnDesk->ReleaseDC( pDC );
}
3. OnEraseBkgnd( CDC *pDC )
Blit the bitmap m_bmp onto pDC and make sure pDC in the same condition (vis
a vis tool selection) when you leave the function as when it came in. The
steps involved are:
Create another DC (say CDC MemDC) compatible with pDC
Select your bitmap m_bmp into MemDC, remembering the old bitmap that it was
created with
BitBlt() from the other MemDC to pDC
Select the old bitmap into MemDC
Let the destructor of MemDC tidy it up. Do not keep it.
========
In your code I see these elements but I can't disentagle them all, and you
appear to be preserving a DC as a view member. Don't. Save your
background bitmap as a member of the view and blit it onto a device context
when you need to, and return any DCs given to you by the system back to the
system. (Think of it as follows: your window may own its background
bitmap, but device contexts are managed carefully by Windows, and only lent
to you temporarily.)
Dave
--
David Webber
Author of 'Mozart the Music Processor'
http://www.mozart.co.uk
For discussion/support see
http://www.mozart.co.uk/mzusers/mailinglist.htm