动态库中创建子对话框的问题。
// 动态库中的函数
CDialog* CreatePageDlg(CWnd* pWnd)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
CPageDlg* pPageDlg = new CPageDlg ;
// 此处有断言失败
// 定位在 void CWnd::AssertValid() const 中的
// ASSERT((CWnd*)p == this); // must be us
pPageDlg->Create(DIALOG_PAGE,pWnd ) ;
pPageDlg->ShowWindow(SW_SHOW) ;
return pPageDlg ;
}
如果忽略这个断言,程序运行不受影响。
如果改成下面这样就没问题了:
pPageDlg->Create(DIALOG_PAGE,CWnd::FromHandle(pWnd->m_hWnd)) ;
我想问一下 :
在动态库中,对于exe 传入的 CWnd*,
pWnd 和 CWnd::FromHandle(pWnd->m_hWnd) 有什么区别?
问题点数:50、回复次数:2Top
1 楼striking(庸人自扰)回复于 2006-03-09 20:44:38 得分 25
实际运行中,窗口指针是会改变的,而句柄会保持不变。
Top
2 楼jiangsheng(蒋晟.Net[MVP])回复于 2006-03-10 09:59:50 得分 25
http://blog.csdn.net/jiangsheng/archive/2004/01/05/3797.aspxTop




