MFC - 创建CSplitterWnd的子视图失败

时间:2014-04-26 12:58:46

标签: c++ mfc

晚上好,

我陷入了一个非常奇怪的问题 我有一个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代码,发现了一个奇怪的东西,如下图所示:

enter image description here

在CSplitterWnd类的CreateView函数中,我看到尽管指针不是NULL,但对pWnd指针地址的检查仍然失败。 我正在使用调试编译禁用所有优化,所以我在调试器中看到的应该是真的,对吗?

有人知道这个吗? 我的主要目的是能够创建这些子视图。

我必须补充说,一开始它正在工作,然后我添加了类CBaseView并从CBaseView派生出CView1和CView2。 当它正在工作时,CView1和CView2当时是CFormView的孩子。 我试着回到这个配置,但我看到了与现在完全相同的问题。

希望有人可以提供帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案 这是由于资源对话框链接到CBaseView 它包含尚未处理的MFCRangeSlider资源。删除此资源或正确处理它足以成功创建子视图。