我写了一个单文档程序,重载了CMainFrame的OnEraseBkgnd方法
BOOL CMainFrame::OnEraseBkgnd(CDC* pDC) 
{
      CBrush backBrush(RGB(206, 206, 206));
      CBrush* pOldBrush = pDC->SelectObject(&backBrush);
      CRect rect;
      pDC->GetClipBox(&rect); 
      pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
      pDC->SelectObject(pOldBrush);
      return TRUE;
}
但是框架的背景色没有变化,谁知道是为什么,如何修改才能实现?

解决方案 »

  1.   

    这是因为框架的背景被视图遮住了,所以看不到。你可以过载视图的
    BOOL CMyView::OnEraseBkgnd(CDC* pDC) 
    {
          CBrush backBrush(RGB(206, 206, 206));
          CBrush* pOldBrush = pDC->SelectObject(&backBrush);
          CRect rect;
          pDC->GetClipBox(&rect); 
          pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
          pDC->SelectObject(pOldBrush);
          return TRUE;
    }
      

  2.   

    我的工程中只有一个CChildView类,我已经重载了它的OnEraseBkgnd(CDC* pDC)方法,可没有用
      

  3.   

    正因为你在 view 中重载OnEraseBkgnd(CDC* pDC),
    所以,由于doucment/view 对消系传递的一般性,由CFrameWnd
    发出的消息先哟流经View->doc->docTemp->Frame->app
    所以你搞的被拦截了。
      

  4.   

    SetClassLong(hwnd,GCL_HBRBACKGROUND,(long)hBrush);
      

  5.   

    SetClassLong(hwnd,GCL_HBRBACKGROUND,(long)hBrush);
    it's ok
      

  6.   

    这个函数SetClassLong写在哪?第一个和第三个参数如何取得?