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

研究codeproject下的一个分割视图,结果。

2013-01-06 
研究codeproject上的一个分割视图,结果。。。。本帖最后由 VisualEleven 于 2012-12-24 13:55:39 编辑// 这里

研究codeproject上的一个分割视图,结果。。。。
本帖最后由 VisualEleven 于 2012-12-24 13:55:39 编辑


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


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;
 }
 这代码竟然可以在CSplitterWindowTutorialView这个视图类上用CSplitterWindowTutorialView

分割了1*2

运行后:可以看到视图变成2个。

1. view是在CMainFrame 的oncreateclient中创建并显示的

2. 在此基础上进行分割1*2
 
一共有3个视图c++ 对象,看到的结果只有2个视图呢,那么以前的视图呢?



[解决办法]
"2. 在此基础上进行分割1*2"
这个‘基础’已经被分割了,‘基础’本身已经没有了。
[解决办法]
很简单的,一共是3个,一个分成了2个。自己隐藏在后面了,用SPY++应该
可以看到,一个父窗体,两个子窗体。
3个都在的。只不过你看到前面的2个而已。

热点排行