《深入浅出MFC》有一段这样的代码
void CScribbleView::OnDraw(CDC* pDC)
{
   CScribbleDoc* pDoc=GetDocument();
   ASSERT_VALID(pDoc);
}
  发现书中没有解释CDC这个类的说明
   顺便问下ASSERT_VALID()这种断言的使用方法,是不是()里面的内容为空则报错

解决方案 »

  1.   

    CDC类定义的是设备上下文对象的类。
    CDC对象提供处理显示器或打印机等设备上下文的成员函数,以及处理与窗口客户区对应的显示上下文的成员。
    通过CDC对象的成员函数进行所有的绘图。派生自COjbect是的~
      

  2.   

    1:CDC 为绘图类,包含基本的绘图方法 2:ASSERT_VALID宏用来在运行时检查一个对象的内部合法性,比如说现在有一个学生对象,我们知道每个学生的年龄一定大于零,若年龄小于零,则该学生对象肯定有问题。事实上,ASSERT_VALID宏就是转化为对象的成员函数AssertValid()的调用,只是这种方法更安全。它的参数是一个对象指针,通过这个指针来调用它的AssertValid()成员函数。与此相配套,每当我们创建从Cobject类继承而来的一个新的类时,我们可以重载该成员函数,以执行特定的合法性检查3:
    ASSERT_VALID 和 ASSERT 有什麼不同,他們可不可相互替換使用? 如: 
              CMenu* pSysMenu = GetSystemMenu(FALSE); 
              ASSERT_VALID(pSysMenu); 可不可寫成 ASSERT(pSysMenu); --------------------------------------------------------------- ASSERT_VALID(pSysMenu); 可寫成 ASSERT(pSysMenu);,通过上面的解释他们的含义有点区别. 
    ASSERT(pSysMenu);//检察pSysMenu是否为空 
    ASSERT_VALID(pSysMenu); //指针是否有效
      

  3.   

    ASSERT_VALID(pSysMenu); //指针是否有效 
       这个指针有效是什么意思呢  是不能为空 还是指针的类型必须匹配