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(或者任何类库)对象的生存期通常与封装的本机窗口的生存期不一致。有很多重叠,但在开始和结束时,你应该谨慎。