读书人

dll中调用CFileDialog的DoModal不能显

发布时间: 2012-04-06 12:22:24 作者: rapoo

dll中调用CFileDialog的DoModal不能显示
在我的动态库的一个函数中,需要调用显示一个CFileDialog,于是我的代码如下:
void CTest::Func()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CFileDialogdlg(TRUE);
dlg.DoModal();
}
运行效果是CFileDialog不显示,并且程序失去响应,我后来在动态库中又新建了一个对话框类CTest2,然后我将上述代码改为
void CTest::Func()
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
CTest2 dlg;
dlg.DoModal();
}
这样对话框可以显示出来,这是为什么呢,是不是涉及到资源句柄方面的问题啊,我也试过
HINSTANCE hIRC=AfxGetResourceHandle();
AfxSetResourceHandle(::GetModuleHandle("MyDll.dll"));
CFileDialogdlg(TRUE);
dlg.DoModal();
AfxSetResourceHandle(hIRC);
这样也不行,而且貌似AfxGetResourceHandle()与GetModuleHandle("MyDll.dll"))是相等的啊,请高人指教!

[解决办法]
CFileDialog类是你自己写的吗?
[解决办法]
CFileDialog dlg (TRUE, "*.*", NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ENABLESIZING|OFN_EXPLORER, _T("All Files (*.*)|*.*||"), NULL);
类似上面的,参数写全
[解决办法]
应该是没问题的
我试了一下可以
[解决办法]
楼主是想实现读文件的功能吧。刚才我验证了下,问题不是出在CFileDialog 上,而是AFX_MANAGE_STATE(AfxGetStaticModuleState()); 在你用VC单独调试时,应该不用加这句话吧。

读书人网 >VC/MFC

热点推荐