在编写文档视图结构的程序,举个具体的例子吧:
建立一个单文档应用程序,最后一步View派生自CEditView,然后这个程序就可以运行了,并且可以完成基本的文字输入等工作。
问题是:
1.
工具栏里的 保存 按钮并没有去判断 视图 中有没有内容,也就是说,不管在视图中是否有内容,保存 按钮 总是可以使用的,如何能根据视图中是否有内容来改变保存按钮的使能状态呢(即,如果在VIEW中输入内容,“保存”按钮 可用,VIEW中输入内容,“保存”按钮 不可用)
至于,执行“新建”和“打开”操作时,VC内部会自动去判断View中是否有内容,如果有,就提示"是否要保存文档"
2.
如何改变打开文件是在文件对话框里的文件扩展名:a,可以通过修改资源里的String Table里的ID对应的入口串;b,可以重载ID_FILE_OPEN的命令响应函数,然后在这里实现文件打开对话框,然后设置对话框的过滤属性。 那么还有别的方法吗?
这两种做法有何分别?
3.
就是针对上面的一些迷惑,我应该看哪些书呢?或者我可以从哪本书中找到答案 以及 真正地去学会用VC的文档/视图结构开发程序呢(当然,并不是说一定要去理清楚VC文档/结构的实现,如果让我现在去完全弄清楚这些,我觉得没有可能)

解决方案 »

  1.   

    1、使"保存"按钮不可用没有意义的。因为保存一个空文档是很正常的。2、这个从根本流程上说,最好重载CApp::OnDocumentOpen函数。并在这里设置打开窗口。因为从文档视图的流程上说。就是这么干的。3、其实书上的东西并不全面。如果你已经看过一两本相关的书了,再看别的也没有用。只能从网上查资料。绝大部分知识点都是网上的。还有如果你看MSDN不吃力的话,最好还是多看MSDN,这个更全面。
      

  2.   

    谢谢fancyxing,回答很全面.
    但我认为 {使"保存"按钮不可用没有意义的} 这句话不是很合理,因为有些时候是需要这样做的。那请问如何 自己控制 "保存"按钮 的状态,使它失效或有效? 默认好象是这些按钮什么时候都有效。
      

  3.   

    只要在CMainFrame中Enable这个ID(ID_FILE_SAVE)就可以了。CMainFrame中:ID_FILE_SAVE有个UPDATE_COMMAND_UT。在这里设置Enable(TRUE)或者Enable(FLASE)void CMainFrame::OnUpdateFileSave(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    pCmdUI->Enable(FALSE);
    }
      

  4.   

    注意如果重载了CAPP的OnFileOpen,最后一定要用OpenDocumentFile来打开文档。
      

  5.   

    谢谢fancyxing,我刚才也想到了这样处理。
    对了,还有两个问题:不管是单文档还是多文档程序,默认情况下,程序启动后就有一个新的文档,有什么函数能禁止这个做法吗?
    再就是,如何根据视图(我的视图派生于CRichEditView)中是否有内容,来使能ID_FILE_SAVE呢?
    是判断文档内容是否有变化吗?
      

  6.   

    对于禁止新文档的问题我也没有处理过。可能单文档的情况下不允许禁止吧。
    多文档的话,肯定有方法。从网上查一下应该可以找的到的。对于第二个问题,写成下面的样子就OK了
    void CTestDocDoc::OnUpdateFileSave(CCmdUI* pCmdUI) 
    {
    // TODO: Add your command update UI handler code here
    CString str;
    ((CEditView*)m_viewList.GetHead())->GetEditCtrl().GetWindowText(str); if ("" == str || !IsModified())
    {
    pCmdUI->Enable(FALSE);
    }
    else
    {
    pCmdUI->Enable(TRUE);
    }

    }