我在MFC DLL中动态创建了一个对话框,目前已经可以正常显示和销毁,但是对话框上的控件在显示是却没有,不知道是怎么回事?我的对话框没有标题栏,是POPUP模式的,请哪位大侠指点一下,最好有简单的示例代码。谢谢。

解决方案 »

  1.   

    在创建对话框的函数前面添加:
    AFX_MANAGE_STATE(AfxGetStaticModuleState()); 
      

  2.   

    // If this is a DLL, need to set up MFC state
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
      

  3.   

    AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
      

  4.   

    如果是普通动态库,你就必须加上AFX_MANAGE_STATE(AfxGetStaticModuleState( ));还要保证资源ID要一致,如果是扩展DLL就不用管了。
      

  5.   

    在会用到该Dll资源的函数的第一句处添加
    AFX_MANAGE_STATE(AfxGetStaticModuleState())
    保证这句是第一句。
    不过有时候在Debug版本中会出现刷新问题,导致Debug版本下的Core Dump,而Release版本没问题。
    为了解决这个Debug版本的问题,可以在要用本模块资源的时候调用
    HINSTANCE hSaveInstance = AfxGetResourceHandle();
    AfxSetResourceHandle(AfxGetApp().m_hInstance);
    资源调用结束后恢复资源
    AfxSetResourceHandle(hSaveInstance);
    这种方法能保证Debug版本和Release版本都没有问题。
    以前我也用AFX_MANAGE_STATE(AfxGetStaticModuleState()),Debug版本老是有问题。用这个方法就没问题了。:)
      

  6.   

    好像大家还没有理解我的意思,我在常规DLL中添加如下的导出函数:
     extern "C" .........
    {
       AFX_MANAGE_STATE(AfxGetStaticModuleState());
       CMyDialog *dlg;
       dlg=new CMyDialog;
       dlg->Create(IDC_MYDIALOG,NULL);
       dlg->ShowWindow(SH_SHOW);
    }
       其中CMyDialog类是添加的一个对话框生成的类,就是想在导出函数中动态弹出一个对话框,可是对话框的边缘可以正确显示,其中的控件却显示不出来,请哪位大侠解决一下?不知道我现在说清楚没有。