Re: CView and bitmap problem
 
Make sure your view classes follows this kind of logic.
class CDrawingSampleView : public CView
{
protected: // create from serialization only
 CDrawingSampleView();
 DECLARE_DYNCREATE(CDrawingSampleView)
// Implementation
public:
    virtual ~CDrawingSampleView();
// Generated message map functions
protected:
   virtual void OnDraw(CDC* pDC);  // overridden to draw this view
   virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
   virtual void OnInitialUpdate();
   afx_msg BOOL OnEraseBkgnd(CDC* pDC);
   afx_msg void OnDrawLine();
   afx_msg void OnDrawRect();
   DECLARE_MESSAGE_MAP()
private:
   CBitmap     m_MemBitmap;
};
}
void CDrawingSampleView::OnInitialUpdate()
{
   CView::OnInitialUpdate();
   CDC *pDC = GetDC();
   //create the bitmap
   m_MemBitmap.CreateCompatibleBitmap(pDC,800,600);
   //create a dc to initialize the bitmap with
   CDC MemDC;
   MemDC.CreateCompatibleDC(pDC);
   ReleaseDC(pDC);
    //make the bitmap white to begin with
   CBitmap *pOldBmp = MemDC.SelectObject(&m_MemBitmap);
   MemDC.FillSolidRect(0,0,800,600,RGB(255,255,255));
   MemDC.SelectObject(pOldBmp);
}
//don't erase background because OnDraw will paint over the entire client 
area
BOOL CDrawingSampleView::OnEraseBkgnd(CDC* pDC)
{
   return TRUE;
}
// CDrawingSampleView drawing
void CDrawingSampleView::OnDraw(CDC* pDC)
{
    //draw whatever is in the bitmap on the screen, stretch to fit entire 
screen
   CDC MemDC;
   MemDC.CreateCompatibleDC(pDC);
   int SavedDC = MemDC.SaveDC();
   MemDC.SelectObject(&m_MemBitmap);
   CRect Rect;
   GetClientRect(&Rect);
   pDC->StretchBlt(0,0,Rect.Width(),Rect.Height(),&MemDC,0,0,800,600,SRCCOPY);
   MemDC.RestoreDC(SavedDC);
}
//draw a random line on the memory bitmap
void CDrawingSampleView::OnDrawLine()
{
   CDC *pDC = GetDC();
   CDC MemDC;
   MemDC.CreateCompatibleDC(pDC);
   ReleaseDC(pDC);
   CBitmap *pOldBitmap = MemDC.SelectObject(&m_MemBitmap);
   MemDC.SelectStockObject(BLACK_PEN);
   MemDC.MoveTo(rand()%800,rand()%600);
   MemDC.LineTo(rand()%800,rand()%600);
   MemDC.SelectObject(pOldBitmap);
   Invalidate();
   UpdateWindow();
}
//draw a random rect on the memory bitmap
void CDrawingSampleView::OnDrawRect()
{
   CDC *pDC = GetDC();
   CDC MemDC;
   MemDC.CreateCompatibleDC(pDC);
   ReleaseDC(pDC);
   CBitmap *pOldBitmap = MemDC.SelectObject(&m_MemBitmap);
   MemDC.SelectStockObject(BLACK_PEN);
   MemDC.Rectangle(rand()%800,rand()%600,rand()%800,rand()%600);
   MemDC.SelectObject(pOldBitmap);
   Invalidate();
   UpdateWindow();
}
AliR.