http://blog.sina.com.cn/s/blog_601ceb5a0100dt5m.html 类的构造函数是私有的原因可以看下这里
你那两个方式其实就是一个方法,还有的另外一种获得视图的方法是用遍历视图的方法
//遍历所有的视图
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView=GetNextView(pos);
if( pView->IsKindOf(RUNTIME_CLASS(testView)))//这里的testView就是要做操作的视图的名字
{
CVehicleInpectionStickersDetectionDemoView *myView = (CVehicleInpectionStickersDetectionDemoView*)pView;
myView->OnUpdate();//执行一个该视图中的函数,函数的内容就是修改视图中控件的一些内容来判断是否获得视图指针成功
}
}
你那两个方式其实就是一个方法,还有的另外一种获得视图的方法是用遍历视图的方法
//遍历所有的视图
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView=GetNextView(pos);
if( pView->IsKindOf(RUNTIME_CLASS(testView)))//这里的testView就是要做操作的视图的名字
{
CVehicleInpectionStickersDetectionDemoView *myView = (CVehicleInpectionStickersDetectionDemoView*)pView;
myView->OnUpdate();//执行一个该视图中的函数,函数的内容就是修改视图中控件的一些内容来判断是否获得视图指针成功
}
}
如果使用的构造函数都是私有的,那么这个类是无法使用的,一般私有的构造函数通过public的调用单文档程序的分割窗体,下图中获得左边视图对象的两种方法哪种更好,还是有更好的办法?
两种方法差别不大,方法2更简洁
-------------------------------------------------------------------------------------
你确定?CMainFrame的构造函数是public的,而CView、CxDoc的构造函数是protected的!
CView、CxDoc的构造函数弄成protected是为了保证view和doc对象仅从序列化创建,即由框架创建,说白了就是DYNCREATE动态创建
向导生成构造函数就是protected的,为什么要定义成protected的,其他的类都没有定义成这样;我想在CMainFrame类中定义个CxxxView类的变量,这样就不用到方法一和方法二;但是该类的构造函数是protected:的
---------------------------------------
这个主要是为了保证框架的一致性,不允许用户手动去创建文档/视图对象,而是通过框架本身的文档视图管理类去创建,比如CDocManager::OnFileNew,或者CDocManager::OpenDocumentFile等,如此做也是为了便于文档视图对象的管理,当销毁doc的时候一定会去销毁view。倘若你自己去管理文档视图对象,你能够保证上述的完整性吗?
{
CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
CHMI_manView* pView = DYNAMIC_DOWNCAST(CHMI_manView, pWnd);
return pView;
}
////
CLeftView* CMainFrame::GetLeftPane()
{
CWnd* pWnd = m_wndSplitter.GetPane(0, 0);
CLeftView* pView = DYNAMIC_DOWNCAST(CLeftView,pWnd);
return pView;
}