我的代码如下
BOOL CViewPropertySheet::OnEraseBkgnd(CDC* pDC) 
{
b.CreateSolidBrush(RGB(228,225,208));  
CRect   r;  
GetClientRect(&r);  
pDC->FillRect(&r,   &b);
  
  return   true;       
/
}这里CRect   r; 这句话,报错,报空指针异常,请问这是怎么回事?谢谢回答

解决方案 »

  1.   

    是CreateSolidBrush创建多次出错吧
      

  2.   

    最好把CreateSolidBrush移到外面创建
      

  3.   

    如果是固定颜色的话,改成这样也可以    CRect   r;  
        GetClientRect(&r);  
        pDC->FillSolidRect(r,RGB(228,225,208));
      

  4.   

    谢谢回答,我把这句话移到了OnInitDialog() 里面,但是结果是不会报错了,背景颜色确没有被修改
      

  5.   

    你把CBrush b做为窗口的成员变量,在OnCreate中b.CreateSolidBrush(RGB(255, 0, 0)),在OnDestroy中b.DeleteObject.
      

  6.   

    昨天我又看了下程序,你重载CViewPropertySheet::OnEraseBkgnd(CDC* pDC) 是不会改变属性页母页的背景色的要想修改背景色,必须在CTabCtrl的派生类中重载OnEraseBkgnd(CDC* pDC)函数,然后在这里实现背景色的改变你可以参考我上次给你回的那个帖子,里面有如何使用CTabCtrl的介绍,下面的我试过是可以的
    BOOL CMyTabCtrl::OnEraseBkgnd(CDC* pDC) 
    {
    // TODO: Add your message handler code here and/or call default
    CRect rect;
    this->GetClientRect(&rect);
    pDC->FillSolidRect(rect,RGB(222,222,222));
    return TRUE;
    //return CTabCtrl::OnEraseBkgnd(pDC);
    }