我用单文档框架做了一个程序。
目的是处理一种专门的文件。
当我打开一个文件的时候我要做一些对界面和变量的配置和改变。
这些动作是在打开文件后马上进行的。
我把它们放在CAppDoc的OnOpenDocument()里面。
用wizard生成的单文档程序是没有“关闭”这个菜单项的,我加了一个,我想当我点“关闭”的时候,要做一些关闭文件的操作。这个关闭不是关闭程序,只是关闭文件,就象多文档窗口里的关闭。现在说下问题:打开文件的方法可以通过“打开”菜单,也可以点“文件”菜单最下面的几个以前打开过的文件菜单项。
用“打开”菜单没问题,我可以重载它,但是用选择以前打开过的文件的方式打开文件时就有问题了。
我打开一个文件后,再把它关闭(当然不是关程序,是关闭文件),然后我再用选择以前打开过的文件的方式打开同一个文件时,就不会触发CAppDoc的OnOpenDocument(),所以我不知道该怎么办了。谁能告诉我应该怎么去做吗?
也不知道我说的大家能看明白吗?不明白的话我会再解释的。

解决方案 »

  1.   

    我查了下:
    我在“关闭”菜单函数里这样用:
    CAppDoc::OnFileClose()
    {
    if (!SaveModified())
        return;
      OnCloseDocument();
    }
    结果是点关闭,窗口也跟着关了,是不是因为是SDI的原因啊?
      

  2.   

    确实是因为是SDI的原因,
    那么我想知道点以前打开过的文件的菜单项,它对应的消息函数是什么呢?
      

  3.   

    OnCloseDocument();本身含有关闭窗口的代码
    你可以这样
    CAppDoc::OnFileClose()
    {
    if (!SaveModified())
        return;
       //在这里添加关闭文档的代码,置空相关的成员变量
       UpdateAllViews(NULL);
    }
      

  4.   

    谢谢楼上,我试了试你的方法,好象不行啊。
    不过我知道怎么去处理了,呵呵,但是好象不是个聪明的方法。我不是重载的CAppDoc类,我重载的是框架类
    在里面添加:
    void CMainFrame::OnFileClose1()
    {
        .....
        CDocument *pDc = pOldView->GetDocument(); //pOldView是刚进入程序时的那个view
        pDc->OnNewDocument();
        .....
    }这样再打开原来那个文件时,他就会认为是新打开了一个,呵呵,是不是很笨啊。这个帖子先不结,看大家还有什么好办法吗?还有就是我想知道mfc对 点以前打开过的文件的菜单项 的消息的处理机制是什么呢?