通常视图类都有一个OnDraw函数,用于响应重绘消息,如
void CTestUnicodeView::OnDraw(CDC* pDC)
{
CTestUnicodeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码}
今天突然对 CTestUnicodeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; 产生了一些疑问。我想为何要在执行绘制之前判断文档类的有效性呢?这个视图的绘制有什么关系吗?
void CTestUnicodeView::OnDraw(CDC* pDC)
{
CTestUnicodeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; // TODO: 在此处为本机数据添加绘制代码}
今天突然对 CTestUnicodeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return; 产生了一些疑问。我想为何要在执行绘制之前判断文档类的有效性呢?这个视图的绘制有什么关系吗?
==============
按照文档视图的设计模式,视图类中绘图所用的数据应该是存放在文档类中的,所以在OnDraw中有如下的代码:
CTestUnicodeDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;因为设计时希望绘图数据是放在文档类中的,所以如果pDoc为NULL的话,就应该返回。
我也想到了这点。但由此我觉得MFC的设计并不合理,因为现实中并不是所有的绘图数据都是放在文档类中的,因此要不要进行文档类的有效性检查应该由用户来决定。