Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CFormView(MFC)中的父窗口为空_C++_Visual C++_Mfc - Fatal编程技术网

C++ CFormView(MFC)中的父窗口为空

C++ CFormView(MFC)中的父窗口为空,c++,visual-c++,mfc,C++,Visual C++,Mfc,我有一个CFormView派生的类,它有一个按钮,我正试图调用ShowWindow。但是,此调用失败,因为m_hWnd变量为null。为什么m_hWnd为空?该对话框在属性窗口中设置了child样式,我正在将父CFrameWnd与表单视图关联。此视图旨在实现无模式 创建视图的代码: void CMainFrame::SwitchEditView(CRuntimeClass * pViewClass) { context.m_pNewViewClass=pViewClass; co

我有一个
CFormView
派生的类,它有一个按钮,我正试图调用
ShowWindow
。但是,此调用失败,因为
m_hWnd
变量为null。为什么m_hWnd为空?该对话框在属性窗口中设置了
child
样式,我正在将父
CFrameWnd
与表单视图关联。此视图旨在实现无模式

创建视图的代码:

void CMainFrame::SwitchEditView(CRuntimeClass * pViewClass)
{
    context.m_pNewViewClass=pViewClass;
    context.m_pCurrentDoc=pDoc;
    context.m_pNewDocTemplate=NULL;
    context.m_pLastView=NULL;
    context.m_pCurrentFrame=this;

    m_subSplitter.CreateView(0,1,pViewClass,CSize(0,0), &context); // create new view and add it to the splitter window
}
我的CFormView派生类的构造函数:

CDFAManEditViewProject::CDFAManEditViewProject()
: CFormView(CDFAManEditViewProject::IDD)
{
    // c_btnEdit is a CButton MFC control
    c_btnEdit.ShowWindow(SW_SHOW); // this call fails on ASSERT(::IsWindow(m_hWnd) )
}

您正试图从视图构造函数访问编辑控件。但是当构造函数运行时,还没有创建视图窗口。这就是为什么您还没有m_hWnd和编辑控件


将控件的初始化移到视图的OnInitialUpdate中。

Oi,我应该猜到了。非常感谢。问题标题说明父窗口的
HWND
NULL
。但是,您发布的代码表明是由
cbtnedit
封装的
HWND
NULL
。不管怎样,正如Scott已经回答的那样,MFC(或者任何类库)对象的生存期通常与封装的本机窗口的生存期不一致。有很多重叠,但在开始和结束时,你应该谨慎。