我用以下语句创建一个子窗口:
CChildFrame *pChildFrame = new CChildFrame();
CCreateContext context;
context.m_pNewViewClass = RUNTIME_CLASS(CMyForm2);
if (!pChildFrame->LoadFrame(IDD_FORMVIEW2|IDR_TESTTYPE|IDR_MAINFRAME, WS_CHILD|WS_OVERLAPPEDWINDOW, this, &context))
{
 //return NULL;
;
}
pChildFrame->ShowWindow(SW_SHOW);
pChildFrame->InitialUpdateFrame(NULL, true);
// TODO: Add your command handler code here
为什么子窗口建立后,菜单栏依然是主窗口的菜单项,没有属于新子窗口的"窗口"菜单项.
请教高手是什么原因.谢谢!!!!!!!!!!

解决方案 »

  1.   

    LoadFrame(IDD_FORMVIEW2|IDR_TESTTYPE|IDR_MAINFRAME
    一般就只Load一个Menu的菜单资源。IDR_MAINFRAME是多重资源
      

  2.   

    我试过只Load子窗口的菜单资源,可还是没有"窗口"菜单项
      

  3.   

    默认的:IDR_TESTTYPE一般就有"窗口"菜单项,如果没有可以从其他地方拷贝过来。
      

  4.   

    菜单资源和图表资源的都是IDR_TESTTYPE,
    LoadFrame(IDR_TESTTYPE,...)就可以吗?
    从其他地方拷贝是什么意思.
      

  5.   

    晚上我试了一下,以上的方法还是不能解决问题。因为LoadFrame里面会调用文档模板,而菜单会从文档模板的共享菜单里提,所以替代的方法是:
    1、用建立一个新的文档模板,然后通过调用文档模板的OpenDocumentFile(NULL)函数的方式来创建新窗口。
    新的文档模板的IDRESOURCE采用同一个资源ID,囊括Menu,stringtable,Accerlator,Icon等
    对话框的资源ID会在FormView的构造函数里载入。2、在FormView的InitUpdate里调用AfxGetMainWnd()->SetMenu(...);//未试当然可能还有其他更好的方法,期待高手来解决。
      

  6.   

    在<<深入浅出MFC>>中有一个TEXT的例子,有些类似.
    但是,它是在已经建立一个子窗口的基础上用MDIGetActive(),如果在主窗口的菜单栏或工具栏建立子窗口,还是会显示程序失败.