为何dlg.DoModal()进入后死循环?

yangtn 2006-07-30 08:52:04
一个基于对话框的MFC程序,使用CPropertySheet,CPropertyPage。
CPropertySheet是用new产生的,CPropertyPage类中有:
CXXXDlg dlg;//CXXXDlg 是个简单的CDialog类,类似messagebox。
int iRet = dlg.DoModal();

为了制作多语言支持,我将RC独立出作为一个库文件,这样就出现了上诉的死循环,死在domodal函数的CreateDlgIndirect中。

若不把RC独立出来,程序运行很正常。
而独立出的RC文件除这外,其它对话框使用都很正常。

我怀疑是由于CPropertySheet的使用引起,请问如何解决。
...全文
471 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangtn 2006-08-01
  • 打赏
  • 举报
回复
函数一开始就设置了资源句柄。
HINSTANCE m_hResourceDll;

BOOL CHMIApp::InitInstance()
{
m_hResourceDll = AfxLoadLibrary (".\\language\\chinese.dll");
if(!m_hResourceDll)
{
AfxMessageBox(" Can't load the language DLL! " );
return FALSE;
}

AfxSetResourceHandle( m_hResourceDll );
......
}

跟踪的时候好像句柄没错
hInst - 0x00e60000 和m_hResourceDll一样啊。程序死在
hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);



jacklzw88 2006-08-01
  • 打赏
  • 举报
回复
CoInitialize(NULL);
AfxEnableControlContainer();
yangtn 2006-08-01
  • 打赏
  • 举报
回复
问题解决了,太奇怪了,我把原来的一行看似无用的代码注释掉了。
m_pSheet->Create(this,WS_CHILD|WS_VISIBLE,0);
//m_pSheet->ModifyStyleEx (0, WS_EX_CONTROLPARENT);加上这句就好了。
yangtn 2006-07-31
  • 打赏
  • 举报
回复
网上找了半天资料还是没有找到原因,等待高手!
思危 2006-07-31
  • 打赏
  • 举报
回复
rc 是如何独立出来的? 做成dll吗?
如果是dll,加载后,CPropertyShee创建时用到对话框资源时要将资源句柄修改为加载资源dll的句柄
yangtn 2006-07-31
  • 打赏
  • 举报
回复
怎么大家没有碰到这个问题过?
CW_Wei 2006-07-30
  • 打赏
  • 举报
回复
up
yangtn 2006-07-30
  • 打赏
  • 举报
回复
resource handle 是对的!
蒋晟 2006-07-30
  • 打赏
  • 举报
回复
单步调试一下看看resource handle是不是对的

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧