各位大侠,
    请问如何在基于MFC的ACTIVEX中实现MDI,目前已经在ACTIVEX中实现了SDI结构,最好有源码!

解决方案 »

  1.   

    我只发现在基于atl的active中采用WTL实现MDI的问题,没有关于基于MFC的activex实现MDI的例子
      

  2.   

    LZ既然已经实现了 SDI, 那MDI应该问题不太, 无非是DocTempate不一样,可以试着换一下看看啊
      

  3.   

    把SDI换成MDI,做了一些改动,还是不成功,不知道该怎么处理了,最近一直在研究MSDN,请各位大侠指教。
      

  4.   

    int CAXMultiDocCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
    {
    CWaitCursor cursor;
    if (COleControl::OnCreate(lpCreateStruct) == -1)
    return -1; m_pTheApp = AfxGetApp();
    if(!((CXxApp*)m_pTheApp)->CreateFrameWnd(this))
    {
    return -1;
    } m_Timer = SetTimer(WM_IDLEUPDATECMDUI, 100, NULL); return 0;
    }BOOL CXxApp::CreateFrameWnd(CWnd* pWnd)
    {
    m_pEMRDocTemplate = new CMultiDocTemplate(
    IDR_EMRTYPE,
    RUNTIME_CLASS(CXxDoc),   
    RUNTIME_CLASS(CChildFrame),
    RUNTIME_CLASS(CXxView));
    AddDocTemplate(m_pEMRDocTemplate); CMainFrame* pMainFrame = new CMainFrame;
    if(!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPED|WS_CHILD, pWnd))//设置WS_CHILD样式
    {
    delete pMainFrame;
    return FALSE;
    }
    m_pMainWnd = pMainFrame; CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);
    cmdInfo.m_nShellCommand =CCommandLineInfo::FileNothing;
    // Dispatch commands specified on the command line
    if (!ProcessShellCommand(cmdInfo))
    {
    return FALSE;
    }

    pMainFrame->ShowWindow(SW_SHOWNORMAL);
    pMainFrame->UpdateWindow(); return TRUE;
    }
      

  5.   

    endergo,采用你的方法后,确实简单了许多问题。但是当我把MainFrame作为控件的子窗口,采用OnFileNew方法时,程序报错。但是如果在MainFrame的LoadFrame方法中不采用child类型即:MainFrame窗体不在控件中,程序可以正常运行。