首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

瓜分窗口, 有个view不见了

2013-01-11 
分割窗口, 有个view不见了// 这里内部构造了一个view的对象CSingleDocTemplate* pDocTemplatepDocTemplat

分割窗口, 有个view不见了

// 这里内部构造了一个view的对象
CSingleDocTemplate* pDocTemplate;
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CSplitterWindowTutorialDoc),
RUNTIME_CLASS(CMainFrame),       // main SDI frame window
RUNTIME_CLASS(CSplitterWindowTutorialView));
AddDocTemplate(pDocTemplate)



下面的代码分割窗口,构建了viwe

,很奇怪:一共有3个view了.

执行后的效果:分割成2个窗口了。




BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
//calculate client size
CRect cr;
GetWindowRect( &cr );

// Create the main splitter with 1 row and 2 columns
if ( !m_mainSplitter.CreateStatic( this, 1, 2 ) )
{
MessageBox( "Error setting up m_mainSplitter", "ERROR", MB_OK | MB_ICONERROR );
return FALSE;
}

// The views for each pane must be created 
if ( !m_mainSplitter.CreateView( 0, 0, RUNTIME_CLASS(CSplitterWindowTutorialView),
CSize(cr.Width()/2, cr.Height()), pContext ) )
{
MessageBox( "Error setting up splitter view", "ERROR", MB_OK | MB_ICONERROR );
return FALSE;
}

if ( !m_mainSplitter.CreateView( 0, 1, RUNTIME_CLASS(CSplitterWindowTutorialView),
CSize(cr.Width()/2, cr.Height()), pContext ) )
{
MessageBox( "Error setting up splitter view", "ERROR", MB_OK | MB_ICONERROR );
return FALSE;
}

//change flag to show splitter created
m_bInitSplitter = true;

//return TRUE instead of the parent method since that would
//not show our window
return TRUE;
}


那么以前的那个view呢


代码是codeproject的


[解决办法]
OnCreateClient是一个虚函数,在CMainFrame的父类CFrameWnd中已定义,用于创建CView对象(函数自动调用),当你在子类中重写这个函数后,根据多态性的原理,将调用CMainFrame中的OnCreateClient,父类中的函数不会调用。你的代码中只是使用分割条创建两个View,自然不会有三个View

热点排行