晚上好,
我陷入了一个非常奇怪的问题 我有一个CSplitterWnd对象,我想添加两个子窗格。 这两个窗格来自CFormView类的两个子类。
我使用以下代码添加它们: (请注意,此代码在CMainFrame类的OnCreateClient函数中调用)
BOOL result = SplitWindow.CreateStatic(this, 1, 2);
if (!result)
return FALSE;
CRect cRect;
GetClientRect(&cRect);
int iHeight = theApp.GetProfile().ImageHeight ? theApp.GetProfile().ImageWidth : cRect.Height() / 2;
CSize szSize1(cRect.Width() / 2, iHeight);
if (!SplitWindow.CreateView(0, 0, RUNTIME_CLASS(CView1), szSize1, pContext))
{
SplitWindow.DestroyWindow();
return FALSE;
}
CSize szSize2(cRect.Width() / 2, iHeight);
if (!SplitWindow.CreateView(0, 1, RUNTIME_CLASS(CView2), szSize2, pContext))
{
SplitWindow.DestroyWindow();
return FALSE;
}
CView1和CView2类是从类CBaseView类派生的两个类,它本身是CFormView的子类(我在CBaseView中只使用了一个对话框定义)。
我面临的问题是对“CreateView”的调用总是返回FALSE。 我进入了MFC代码,发现了一个奇怪的东西,如下图所示:
在CSplitterWnd类的CreateView函数中,我看到尽管指针不是NULL,但对pWnd指针地址的检查仍然失败。 我正在使用调试编译禁用所有优化,所以我在调试器中看到的应该是真的,对吗?
有人知道这个吗? 我的主要目的是能够创建这些子视图。
我必须补充说,一开始它正在工作,然后我添加了类CBaseView并从CBaseView派生出CView1和CView2。 当它正在工作时,CView1和CView2当时是CFormView的孩子。 我试着回到这个配置,但我看到了与现在完全相同的问题。
希望有人可以提供帮助。 提前谢谢。
答案 0 :(得分:0)
我找到了解决方案 这是由于资源对话框链接到CBaseView 它包含尚未处理的MFCRangeSlider资源。删除此资源或正确处理它足以成功创建子视图。