WEB开发网
开发学院软件开发VC 深入浅出MFC“文档/视图”架构(4)――视图 阅读

深入浅出MFC“文档/视图”架构(4)――视图

 2009-02-11 20:00:32 来源:WEB开发网   
核心提示: CView类首先要维护文档与视图之间的关联,它通过CDocument* m_pDocument保护性成员变量记录关联文档的指针,深入浅出MFC“文档/视图”架构(4)――视图(2),并提供CView::GetDocument接口函数以使得应用程序可得到与视图关联的文档,而在CView类的析

CView类首先要维护文档与视图之间的关联,它通过CDocument* m_pDocument保护性成员变量记录关联文档的指针,并提供CView::GetDocument接口函数以使得应用程序可得到与视图关联的文档。而在CView类的析构函数中,需将对应文档类视图列表中的本视图删除:

CView::~CView()
{
    if (m_pDocument != NULL)
       m_pDocument->RemoveView(this);
}

CView中地位最重要的函数是virtual void OnDraw(CDC* pDC) = 0;从这个函数的声明可以看出,CView是一个纯虚基类。这个函数必须被重载,它通常执行如下步骤:

(1)    以GetDocument()函数获得视图对应文档的指针;

(2)    读取对应文档中的数据;

(3)    显示这些数据。

以MFC向导建立的一个初始“文档/视图”架构工程将这样重载OnDraw()函数,注意注释中的“add draw code for native data here(添加活动数据的绘制代码)”:

/////////////////////////////////////////////////////////////////////////////

// CExampleView drawing
void CExampleView::OnDraw(CDC* pDC)
{
    CExampleDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
}
CView::PreCreateWindow负责View的初始化:
/////////////////////////////////////////////////////////////////////////////
// CView second phase construction - bind to document
BOOL CView::PreCreateWindow(CREATESTRUCT & cs)
{
    ASSERT(cs.style & WS_CHILD);
  
    if (cs.lpszClass == NULL)
    {
       VERIFY(AfxDeferRegisterClass(AFX_WNDFRAMEORVIEW_REG));
       cs.lpszClass = _afxWndFrameOrView; // COLOR_WINDOW background
    }
  
    if (afxData.bWin4 && (cs.style & WS_BORDER))
    {
       cs.dwExStyle |= WS_EX_CLIENTEDGE;
       cs.style &= ~WS_BORDER;
    }
  
    return TRUE;
}

Tags:深入浅出 MFC 文档

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接