永发信息网

MFC 窗口分割(拆分)问题

答案:2  悬赏:70  手机版
解决时间 2021-01-22 21:30
MFC 窗口分割(拆分)问题
最佳答案
BOOL CChildFrame::OnCreateClient( LPCREATESTRUCT ,
CCreateContext* pContext)
{
// 产生静态分裂视窗,将参数一的句柄视图窗口分为横列为 1,纵行为 2。
m_wndSplitter1.CreateStatic(this, 1, 2);
// 产生分裂视窗的第一个窗口(标号 0,0)的 view 视窗,采用 CTextView。
m_wndSplitter1.CreateView(0, 0, RUNTIME_CLASS(CTextView),CSize(300, 0), pContext); // 产生第二个分裂视窗,横列为2 纵行为1。位在第一个分裂视窗的(0,1)窗口
m_wndSplitter2.CreateStatic(&m_wndSplitter1, 2, 1,WS_CHILD | WS_VISIBLE, m_wndSplitter1.IdFromRowCol(0, 1));
// 产生第二个分裂视窗的第一个窗口(标号 0,0)的 view 视窗,采用 CBarView。
m_wndSplitter2.CreateView(0, 0, RUNTIME_CLASS(CBarView),CSize(0, 150), pContext);
// 产生第二个分裂视窗的第二个窗口(标号 1,0)的 view 视窗,采用 CGraphView。
m_wndSplitter2.CreateView(1, 0, RUNTIME_CLASS(CGraphView),CSize(0, 0), pContext);//CSize(0, 0)就是剩余的空间大小 // 设定 active pane
SetActiveView((CView*)m_wndSplitter2.GetPane(1,0));
return TRUE;
}
全部回答
《这是我在网上摘的,不知道对你有用吗》 void EkSwitchViewInSplitter(CMySplitterWnd *pSplitter, int row, int col, CRuntimeClass *pViewClass)
{
ASSERT_VALID( pSplitter );
ASSERT( pViewClass != NULL );
ASSERT( pViewClass->IsDerivedFrom( RUNTIME_CLASS( CView ) ) );
//查找要替换的视图
CWnd* pPaneWnd = pSplitter->GetPane( row,col );
if( !pPaneWnd->IsKindOf( RUNTIME_CLASS( CView ) ) )
{
TRACE2
("Unable to switch: pane (%d,%d) is not a view\n",row,col);

return;
}

CView* pCurrentView = static_cast (pPaneWnd);
ASSERT_VALID( pCurrentView );
ASSERT_KINDOF( CView,pCurrentView );

if(pCurrentView->IsKindOf(pViewClass))
{
return;
}
//保存当前视图的位置和活动状态
CRect rcView;
pCurrentView->GetWindowRect( &rcView );

CView* pActiveView = pSplitter->GetParentFrame()->GetActiveView();
BOOL bSaveActive = ( pActiveView == NULL ) || (pActiveView == pCurrentView );
//查找相关的文档
CDocument* pDoc = pCurrentView->GetDocument();
ASSERT_VALID( pDoc);
//当释放活动窗口时,确保文档不会自我析构
BOOL bSaveAutoDelete = pDoc->m_bAutoDelete;
pDoc->m_bAutoDelete = FALSE;
//释放活动视图
pCurrentView->DestroyWindow();
//恢复文档到初始状态
pDoc->m_bAutoDelete = bSaveAutoDelete;
//初始化CreatView()使用的创建上下文
CCreateContext context;
context.m_pNewDocTemplate = NULL;
context.m_pLastView = NULL;
context.m_pCurrentFrame = NULL;
context.m_pNewViewClass = pViewClass;
context.m_pCurrentDoc = pDoc;
//创建新的视图
pSplitter->CreateView( row,col,pViewClass,rcView.Size(),&context );
CView* pNewView = static_cast(pSplitter->GetPane( row,col ));
ASSERT_VALID( pNewView );
ASSERT_KINDOF( CView, pNewView );
//定位新视图,与旧视图位置相同,如果需要则激活它
pSplitter->ScreenToClient( &rcView );
pNewView->MoveWindow( &rcView, TRUE );
if( bSaveActive )
{
pSplitter->GetParentFrame()->SetActiveView( pNewView );
}
//给视图发送WM_INITIALUPDATE
pNewView->GetParentFrame()->InitialUpdateFrame( pDoc,TRUE );
}
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
ppsu和psu有什么区别
csr2t5小牛可以赢赌车吗
求60道二次根式计算题(含答案过程)!!!
火锅店里称小料的那个大碗就是料台上放的那个
水泥的型号是怎样分的
方程x+20=2(x-18)的解是什么?
在保健品店能买到真的伟哥吗
巴赫《英国组曲》和《十二平均律》哪个相对比
非法调用列表是咋回事
高中会考难吗?
七分之二x-八分之一x=八百一十,x等于多少
富可敌国是成语吗
胸椎脊髓受压能恢复吗
0.5分土地是不是5分土地
Thinkpad T460P拆机图T460P怎么拆键盘
推荐资讯
怎样取消克隆网络
一个男人夸一个女人是一块肥而不腻的肥肉是什
340x30怎样列竖式计算
挖出来的煤为什么要用水洗?
康乐幼儿园(邯郸魏县)地址在哪,我要去那里办
希望幼儿园(邯郸魏县)地址在什么地方,我要处
最近怎么老是喜欢惹别人
郭庆村地址在哪,我要去那里办事,
泽龙汽车销售服务有限公司地址有知道的么?有
平方在电脑上怎么打出来
2016李弘基和池昌旭演的音乐剧那些日子是同一
倒车打方向盘时候,有嘎嘎响声怎么回事?谁知道
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?