这是不是MFC的Bug(CFormView,SplitterWnd)?

fonsea 2003-09-21 04:35:05
文档视图结构中拆分窗口用到CFormView的情况有时出现“创建空文档失败”而不能创建视图?
不知道大家使用过程中遇到过没有,如下(其中CTestFormView继承自CFormView):
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
int xlong=lpcs->cx/2;
int ylong=lpcs->cy/2;
if(!m_pWndSplitter0->CreateStatic(this, 2,1)||
!m_pWndSplitter0->CreateView(0,0,RUNTIME_CLASS(CMyEditView), CSize(ylong,0),pContext)||
!m_pWndSplitter1->CreateStatic(m_pWndSplitter0, 1, 2,WS_CHILD|WS_VISIBLE,m_pWndSplitter0->IdFromRowCol(1,0))||
!m_pWndSplitter1->CreateView(0,0,RUNTIME_CLASS(CEyeEditView), CSize(xlong, 0),pContext)||
!m_pWndSplitter1->CreateView(0,1,RUNTIME_CLASS(CTestFormView), CSize(0,0),pContext))
return FALSE;
return TRUE;
}
这样ok!
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
int xlong=lpcs->cx/2;
int ylong=lpcs->cy/2;
if(!m_pWndSplitter0->CreateStatic(this, 2,1)||
!m_pWndSplitter0->CreateView(0,0,RUNTIME_CLASS(CMyEditView), CSize(ylong,0),pContext)||
!m_pWndSplitter1->CreateStatic(m_pWndSplitter0, 1, 2,WS_CHILD|WS_VISIBLE,m_pWndSplitter0->IdFromRowCol(1,0))||
!m_pWndSplitter1->CreateView(0,0,RUNTIME_CLASS(CTestFormView), CSize(xlong, 0),pContext)||//这一句返回FALSE
!m_pWndSplitter1->CreateView(0,1,RUNTIME_CLASS(CTestFormView), CSize(0,0),pContext))
return FALSE;
return TRUE;
}
这样失败
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
int xlong=lpcs->cx/2;
int ylong=lpcs->cy/2;
if(!m_pWndSplitter0->CreateStatic(this, 2,1)||
!m_pWndSplitter0->CreateView(0,0,RUNTIME_CLASS(CTestFormView), CSize(ylong,0),pContext)||//这一句返回FALSE
!m_pWndSplitter1->CreateStatic(m_pWndSplitter0, 1, 2,WS_CHILD|WS_VISIBLE,m_pWndSplitter0->IdFromRowCol(1,0))||
!m_pWndSplitter1->CreateView(0,0,RUNTIME_CLASS(CEyeEditView), CSize(xlong, 0),pContext)||
!m_pWndSplitter1->CreateView(0,1,RUNTIME_CLASS(CTestFormView), CSize(0,0),pContext))
return FALSE;
return TRUE;
}
这样也失败,跟踪MFC的源代码可以发现是俩种情况在创建FormView的时候创建失败,具体为:hWnd = ::CreateDialogIndirect(hInst, lpDialogTemplate,
pParentWnd->GetSafeHwnd(), AfxDlgProc);创建失败。
而:
!m_pWndSplitter1->CreateView(0,1,RUNTIME_CLASS(CTestFormView), CSize(0,0),pContext)成功。
这是怎么回事?!
...全文
36 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
fonsea 2003-09-21
虽然没全部解除我心中的疑问!还是要谢谢,买单!
回复
蒋晟 2003-09-21
CRichEditView有自动AfxInitRichEdit……
http://www.vckbase.com/document/viewdoc.asp?id=485
回复
fonsea 2003-09-21
真的很谢谢 jiangsheng(蒋晟.Net) 大侠!我为了这个问题到处找原因弄了一天,确实是没有初始化RichEditCtrl,我的formview中用到了RichEditCtrl, 我哭....

另外还请指点一下为什么在没有调用AfxInitRichEdit的时候第一种情况可以了?难道在某个地方初始化了。
还有CRichEditView中的RichEditCtrl控件是不一样的吧,例如如果在98下中调用CRichEditView中的RichEditCtrl的SetWindowText如果是中文则为乱码。它是不是用的是操作系统自带的RichEditCtrl。

再次表示感谢!!!
回复
蒋晟 2003-09-21
FormView创建的确可能失败,例如有控件创建失败时WM_CREATE处理返回-1。确保需要用到的控件已经注册并且在程序中做了必要的初始化。可以参考AfxInitRichEdit的文档。

Command what is yours
Conquer what is not
回复
相关推荐
发帖
界面
创建于2007-09-28

1.5w+

社区成员

VC/MFC 界面
申请成为版主
帖子事件
创建了帖子
2003-09-21 04:35
社区公告
暂无公告