对话框带分割条,且左右视图都从DLL中到出,不知有高手做过没有?

解决方案 »

  1.   

    http://www.codeproject.com/splitter/simpledlgsplitter.asp
      

  2.   

    http://www.codeguru.com/dll/viewdocdll.html
      

  3.   

    这是2个单独的例子,分别实现了对话框分割和DLL导出view/doc,综合起来就很容易了
      

  4.   

    其实,我想问的是如何导出两个CDialog然后合并到一个CDialog,画条分割条
    有人说使用多层继承的方式,但是我还没有找到好的方法
      

  5.   

    我觉得这样实现比较容易,且功能类似:
    同时以无模式显示这两个对话框,让两个对话框在位置上粘起来(类似Winamp),这很容易实现。另外,还可以在两个对话框粘在一起的一条边上拖动时,增加一个对话框的宽度,同时缩小另一个的宽度,保持总宽度不变,就像在拖动一个分隔条一样,这都比较容易实现。供参考,hope help:)
      

  6.   

    真的感动,感谢各位!
        我的设想是实现最大的公用,因为我所有的程序的界面都类似,分为左右两视图.
        用无模式对话框的方法我觉得是不错,不过好象有点勉强了,你们说呢.~-~
        而且通讯上不方便,我要用到很多通讯协议,两视图公用.    现在我想想还是用导出CFromView的方式,比较合理.
        但是又碰到了问题.代码如下:
        
    //DLL导出接口
    extern "C" AFX_EXT_API UINT Init(CRuntimeClass** view) //返回视图1 
    {
    new CDynLinkLibrary(InitialContactDLL);
    *view = RUNTIME_CLASS(CCustomerContact);  //CFromView子类
    return(0);
    }
    extern "C" AFX_EXT_API UINT Init2(CRuntimeClass** view) //CFromView子类
    {
    new CDynLinkLibrary(InitialContactDLL);
    *view = RUNTIME_CLASS(CCustomerContact2);
    return(0);
    }
    //主程序采用SDI单文档
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    //获取CView from DLL
    typedef UINT ( * LPDLLFUNC)(CRuntimeClass**); LPDLLFUNC lpfnDllFunc = NULL;
    HINSTANCE hDLL   = NULL;        
    hDLL = AfxLoadLibrary("InitialContact.dll");
    if(hDLL)
    {
    //first
    lpfnDllFunc = (LPDLLFUNC)::GetProcAddress(hDLL,"Init");
    if (!lpfnDllFunc)
    {
    AfxMessageBox("Function not found in DLL");
    FreeLibrary(hDLL);
    return -1;
    }
    lpfnDllFunc(&pNewViewClass1);
    ASSERT(pNewViewClass1); //Second
    lpfnDllFunc = (LPDLLFUNC)::GetProcAddress(hDLL,"Init2");
    if (!lpfnDllFunc)
    {
    AfxMessageBox("Function not found in DLL");
    FreeLibrary(hDLL);
    return -1;
    } lpfnDllFunc(&pNewViewClass2);
    ASSERT(pNewViewClass2);
    //CSdiDllFramesDoc* pDoc = (CSdiDllFramesDoc*) GetActiveDocument();
    //ASSERT(pDoc);
    //pDoc->SwitchToView(pNewViewClass);
    }
    else
    {
    AfxMessageBox("Dll not found!");
    } // create the new view
    CCreateContext context;
    context.m_pNewViewClass = pNewViewClass1;
    context.m_pCurrentDoc =   NULL;
    CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
    if (pNewView != NULL)
    {
    // the new view is there, but invisible and not active...
    pNewView->ShowWindow(SW_SHOW);
    pNewView->OnInitialUpdate();
    SetActiveView(pNewView);
    RecalcLayout();
    //return TRUE; // 如果这里返回的话则只能显示1个视图,既默认视图被DLL视图覆盖
    }    //期待分割成功
        m_Splitter.CreateStatic(this,1,2);

       if (!m_Splitter.CreateView(0, 0, pNewViewClass1, CSize(320,0), pContext)) 
    return false;  
    m_Splitter.CreateView(0, 1, pNewViewClass2, CSize(400,0), pContext);
    return  CFrameWnd::OnCreateClient(lpcs, pContext);
    }//执行结果大失所望,完全乱掉了,分割条也看不见