我想用左键改变颜色,可运行有非法错误,请帮忙给看看void CEx02View::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    brush.CreateSolidBrush(RGB(0,255,0));
    Invalidate();
    CView::OnLButtonDown(nFlags, point);
}void CEx02View::OnDraw(CDC* pDC)
{
CEx02Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码
    CRect rect(10,10,100,100);
    pOldBrush = (CBrush*)pDC->SelectObject(&brush);;
    pDC->Rectangle(&rect); 
    pDC->SelectObject(pOldBrush);
}

解决方案 »

  1.   

    // TODO: 在此添加消息处理程序代码和/或调用默认值
        if (brush.GetSafeHandle())
            brush.DeleteObject();
        brush.CreateSolidBrush(RGB(0,255,0));
      

  2.   

    brush放在构造函数里面初始化
      

  3.   

    brush放在构造函数里面或者是OnCreate里面创建。因为OnDraw一般会比OnLButtonDown先被执行,而此时brush无效。
      

  4.   

    谢谢Mackz
    pomelowu:好象brush可以不用在构造函数里初始,编译了没影响
      

  5.   

    构造函数里或OnCreate初始化
    析构函数里释放是使你的代码更优化,效率更高,编程习惯.