刚开始学VC,过去的一周真是痛苦无比,现在脑子里面全是星星。
请各位过来的朋友们帮我理理思路:
1.对于文档/视图模式,程序是怎么知道要加载视图的呢?
2.一个程序可以有多个视图么?如果可以,怎么通知程序显示不同的视图呢?比如我想通过单击不同的按钮,分别显示不同的ListView的内容,应该怎么做呢?
3.视图和对话框有什么联系和区别么?C#或者VB里面的一个个FORM相当于VC里面的视图还是对话框?一个ListView和一个对话框加ListCtrl控件可以实现一样的功能么?如果我想实现问题2,可以用对话框做么?先问这么多,因为我是初学,可能问题很可笑或者弱智,但是还是请过来的兄弟帮帮忙,知道什么回答什么——前提是你没有被我的叙述弄晕:)
包涵

解决方案 »

  1.   

    1.MFC中的CMainFrame,CDocument,CView是“三位一体”的(如果你使用doc/view结构)
    去CWinApp的InitInstance()可以看到AppWizard帮你创建了一个文档模板类,用它来
    管理这个三元组。如果你想透彻地搞清楚这些问题,可以看候捷的书
    2.一个程序可以有多个文档,也可以有多个视图。我记得《VC技术内幕》的第十九章
    专门讲了这个问题,给了一个例子进行多视图切换。下面是主要代码:
    void CMainFrame::SwitchToView(eView nView)
    {
    CView* pOldActiveView = GetActiveView();
    CView* pNewActiveView = (CView*) GetDlgItem(nView);
    if (pNewActiveView == NULL) {
    switch (nView) {
    case STRING:
    pNewActiveView = (CView*) new CStringView;
    break;
    case HEX:
    pNewActiveView = (CView*) new CHexView;
    break;
    }
    CCreateContext context;
    context.m_pCurrentDoc = pOldActiveView->GetDocument();//获取老的视图所联系的文档
    pNewActiveView->Create(NULL, NULL, WS_BORDER,
    CFrameWnd::rectDefault, this, nView, &context);//原来context中有与视图有联系的文档类的信息
    pNewActiveView->OnInitialUpdate();
    }
    SetActiveView(pNewActiveView);
    pNewActiveView->ShowWindow(SW_SHOW);
    pOldActiveView->ShowWindow(SW_HIDE);
    pOldActiveView->SetDlgCtrlID(
    pOldActiveView->GetRuntimeClass() == 
    RUNTIME_CLASS(CStringView) ? STRING : HEX);
    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
    RecalcLayout();
    }
    3.我个人认为VB中的对话框和VC中的CDialog更接近一些