如果我的MFC/MDI程序,不得不在某一个子框架窗体的VIEW里关闭整个子框架窗体,怎么做?比方说,在主框架窗体里,或者CWinAPP里输入了一个文件路径名,存储在一个CString变量里“cstrFileName”。然后调用如下语句创建文档并传递刚才输入的文件名:pDocTemp->OpenDocumentFile(cstrFileName);文档创建后,文档对象本身不作事情,它只是把cstrFileName存储起来,然后调用VIEW的OnInitialUpdate()函数,VIEW在OnInitialUpdate()函数里从所属的文档里取得cstrFileName,调用自己的某一方法试图打开该文件。如果文件无效,打开失败,那么这个子框架窗体,或者说这个文档就不应该再留着,而是应当关闭。但是在VIEW的OnInitialUpdate()函数里怎么关闭这个子框架窗体,或者说这个文档呢?呵呵,小弟说话就是有点唐僧,多包含,谢谢帮忙。

解决方案 »

  1.   

    very easy!
    OnInitialUpdate()
    {
    ...
    //just a statement
    this->GetParentFrame()->SendMessage(WM_CLOSE,0,0);
    ....
    }
      

  2.   

    The WM_CLOSE message is sent as a signal that a window or an application should terminate.A window receives this message through its WindowProc function. 
    SyntaxWM_CLOSE    WPARAM wParam
        LPARAM lParam;
    ParameterswParam
    This parameter is not used.
    lParam
    This parameter is not used.
    Return ValueIf an application processes this message, it should return zero.
      

  3.   

    psusong(Think Different) 高手,您先别走开别走开,小弟还不是很放心,最后问一句:按照你的方法关闭了子框架窗体,是不是所有隶属于它的视图啊、文档啊什么的就都删除(关闭)了?(窃喜ing,还真让俺碰上高手了)其实我本来想到过消息,但是我是给主框架和子框架传了(WM_COMMAND,ID_FILE_CLOSE,0)的消息,呵呵,结果程序不理我~
      

  4.   

    再有,按照你的方法,会出现非法访问,好像是在OnInitalUpdate里就把窗口关了,结果文档类或者什么其他类还要继续调用窗口的一些成员方法呢。
    不过我再想想,把SendMessage往后放一放试试。
      

  5.   

    好了psusong(Think Different) 大哥,我想我的问题解决了,非法访问的问题,只要让消息“稍后”进行处理即可,就是说把SendMessage换成PostMessage就行了。
    谢谢你!高手!