问题描述:
须要一个系统管理页面,因此写了个dll模态对话框是什么时候实例的对话框,调用形成系统管理对话框,
系统管理对话框中使用TabCtrl形成标签页,
每位标签页又绑定一个子对话框,
在系统管理对话框类初始化TabCtrl对象时模态对话框是什么时候实例的对话框,用:
子对话框类对象.Create(IDD_子对话框, GetDlgItem(IDC_TabCtrl));
//或:子对话框类对象.Create(子对话框类::IDD, &TabCtrl对象);
绑定子对话框对象和TabCtrl对象时,子对话框对象==NULL
问题解决:
在Create前加一句AFX_MANAGE_STATE(AfxGetStaticModuleState());,如
AFX_MANAGE_STATE(AfxGetStaticModuleState());
子对话框类对象.Create(IDD_子对话框, GetDlgItem(IDC_TabCtrl));
问题缘由:
在dll外调用时,须要指定让dll里的界面代码使用该dll的资源(Resource.h)
MFC的对话框装载资源是通过获取当前线程对应的ModuleState保存的ResourceHandler来装载资源的。
所以,dll里的代码,须要在函数的入口,首先把当前执行线程的ModuleState换成该dll的State,这样能够装载该dll的资源!
否则会由于找不到资源造成新建对话框句柄为NULL