主界面  typedef void (WINAPI * TESTDLL)();
HINSTANCE hmod;
hmod = ::LoadLibrary ("mfcdll.dll");
if(hmod==NULL)
{
AfxMessageBox("Fail");
}
TESTDLL lpproc;
lpproc = (TESTDLL)GetProcAddress (hmod,"Show");
if(lpproc!=(TESTDLL)NULL)
(*lpproc)();

FreeLibrary(hmod);

解决方案 »

  1.   

    dll 函数 Show  
    extern "C" __declspec(dllexport) void Show()
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    CTest test;
    test.DoModal ();
    }
      

  2.   

    思路:
    1、新建基于MFC的DLL,在DLL中做一个导出函数,在该导出函数中new出对话框类,导致函数返回CWnd*也就是new出来的窗口实例指针。如下:
    CWnd *  InitData( CWnd * pWnd/*父窗口指针,由调用者传入,一般是主对话框*/ )
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); CDlgCKTD * pDlg = new CDlgCKTD;
    if( pDlg->Create( CDlgCKTD::IDD,CWnd::FromHandle( pWnd->GetSafeHwnd() ) ) )
    {
    pDlg->SetParent( pWnd );
    pDlg->ShowWindow( SW_SHOW ); return pDlg;
    }
    return NULL;
    }2、在主对话框中加载动态库并调用导出函数,获取DLL中的子窗口句柄,然后进行显示,移动位置等操作。
    void CMainFrame::Load(CString strModuleName,CString strTitle,LPARAM lParam/* = 0*/ )
    {
    //判断选项卡个数是否超过设定
    CIni ini;
    if( m_wndTab.GetItemCount() >= (int)ini.GetInt( _T("system"),_T("maxtabs"),10 ) )
    {
    _STARTPROMPT;
    if( StartPrompt ) StartPrompt( PROMPT_TYPE_POPUP,_T("选项卡过多,请关闭某些选项卡后再尝试打开!"),0x0000ff,PROMPT_POS_TOP_CENTER,this,NULL,FALSE );
    return;
    }
    HMODULE hDll = LoadLibrary( strModuleName );
    if( hDll )
    {
    typedef CWnd * ( * INTIDATA)(CWnd *);
    INTIDATA InitData = (INTIDATA)GetProcAddress( hDll,"InitData" );
    if( InitData )
    {
    unsigned int uVersion = 0;
    CWnd * pWnd = InitData( GetActiveView() );
    if( pWnd )
    {
    pWnd->ShowWindow( SW_SHOWNORMAL );
    pWnd->UpdateWindow();
    }
    }
    }
    }3、在DLL中用WS_CHILD形式的窗口并附加在主窗口中会出现的问题是:WS_CHILD窗口中TAB键会失效,解决办法参见:http://support.microsoft.com/kb/233263/zh-cn
      

  3.   


    十分感谢 就是有个小问题  弹出的对话框不会跟随主界面移动 设置了 child也不行 难道只能用  onmove 然后传rect 给子对话框 从新设置位置来实现吗
      

  4.   


    不可能的,在对话框的图形编辑器上直接设置Style:Child是肯定会自动随着父窗口移动的,我做的现成的程序在这呢,客户都用了几年了,但是父窗口尺寸变了,需要主动在父窗口的OnSize里去通知new出来的子窗口,从而子窗口也手动MoveWindow来改变大小。
      

  5.   


    不可能的,在对话框的图形编辑器上直接设置Style:Child是肯定会自动随着父窗口移动的,我做的现成的程序在这呢,客户都用了几年了,但是父窗口尺寸变了,需要主动在父窗口的OnSize里去通知new出来的子窗口,从而子窗口也手动MoveWindow来改变大小。
    额 如果子对话框 用 dll调用的话 就会不跟着移动的
      

  6.   


    不可能的,在对话框的图形编辑器上直接设置Style:Child是肯定会自动随着父窗口移动的,我做的现成的程序在这呢,客户都用了几年了,但是父窗口尺寸变了,需要主动在父窗口的OnSize里去通知new出来的子窗口,从而子窗口也手动MoveWindow来改变大小。
    你的 是通过dll 调用的吗?
      

  7.   


    不可能的,在对话框的图形编辑器上直接设置Style:Child是肯定会自动随着父窗口移动的,我做的现成的程序在这呢,客户都用了几年了,但是父窗口尺寸变了,需要主动在父窗口的OnSize里去通知new出来的子窗口,从而子窗口也手动MoveWindow来改变大小。
    你的 是通过dll 调用的吗?确定是通过基于MFC的DLL调用的,而且有十几个这样的DLL,每调用一个DLL导出函数生成一个WS_CHILD的子对话框,就在主对话框中建立一个选项卡与其对应。