100分急求解决方案,在线等

solarhe 2005-03-26 11:15:30
我创建了一个多文档的程序.想把其中一个文档框架切分成两上,一下的三个视图窗口!每个窗口都可以跟着文档框架的大小来变化大小,可以单独的视图的大小却不能改变!下面是文档框架的cpp文件,请大家帮忙!
// ChildFrm.cpp : implementation of the CChildFrame class
//

#include "stdafx.h"
#include "pp.h"

#include "ChildFrm.h"
#include "MyTreeView.h"
#include "MyListView.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CChildFrame

IMPLEMENT_DYNCREATE(CChildFrame, CMDIChildWnd)

BEGIN_MESSAGE_MAP(CChildFrame, CMDIChildWnd)
//{{AFX_MSG_MAP(CChildFrame)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CChildFrame construction/destruction

CChildFrame::CChildFrame()
{
// TODO: add member initialization code here

}

CChildFrame::~CChildFrame()
{
}

BOOL CChildFrame::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs

if( !CMDIChildWnd::PreCreateWindow(cs) )
return FALSE;

return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CChildFrame diagnostics

#ifdef _DEBUG
void CChildFrame::AssertValid() const
{
CMDIChildWnd::AssertValid();
}

void CChildFrame::Dump(CDumpContext& dc) const
{
CMDIChildWnd::Dump(dc);
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CChildFrame message handlers
//添加三个视图的成员函数
CView* CChildFrame::AddView(CCreateContext* pContext,UINT nIndex,LPCTSTR lpSZWindowName)
{
CWnd* pView=(CWnd*)pContext->m_pNewViewClass->CreateObject();
if(pView==NULL)
{
return NULL;
}
ASSERT_KINDOF(CWnd,pView);
//是不是这里的窗口风格有问题?
if(!pView->Create(NULL,lpSZWindowName,WS_CHILD|WS_VISIBLE|WS_CAPTION,
CRect(0,0,0,0),this,nIndex,pContext))
{
return NULL;
}
return (CView*)pView;
}
//重载OnCreateClient
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
if((m_pView1=AddView(pContext,1,_T("123")))==NULL)
{
return false;
}
pContext->m_pNewViewClass=RUNTIME_CLASS(CMyListView);
if((m_pView2=AddView(pContext,2,_T("123")))==NULL)
{
return false;
}
pContext->m_pNewViewClass=RUNTIME_CLASS(CMyTreeView);
if((m_pView3=AddView(pContext,2,_T("123")))==NULL)
{
return false;
}
return true;
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
}
//调整文档框架中三个视图的大小
void CChildFrame::OnSize(UINT nType, int cx, int cy)
{
CMDIChildWnd::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
m_pView1->MoveWindow(0,0,cx/2,cy/2);
m_pView2->MoveWindow(cx/2,0,cx/2,cy/2);
m_pView3->MoveWindow(0,cy/2,cx,cy/2);

}
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
solarhe 2005-03-28
  • 打赏
  • 举报
回复
谢谢了,其实我昨天也调试通过了,不过还是遗憾不能在自己思路的基础上进行.
lonenomad 2005-03-27
  • 打赏
  • 举报
回复
动态拆分窗口
1、给框架窗口添加一个CSplitterWnd数据成员。
2、覆盖框架窗口的虚拟OnCreateClient函数,并调用CSplitterWnd::Create在框架窗口的客户区创建动态拆分窗口。
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
return m_wndSlitter.Create(this,2,1,CSize(1,1),pContext);//m_wndSlitter是成员变量
}
静态拆分窗口
1、给框架窗口添加一个CSplitterWnd数据成员。
2、覆盖框架窗口的虚拟OnCreateClient函数,并调用CSplitterWnd::CreateStatic在框架窗口的客户区创建静态拆分窗口。
3、使用CSplitterWnd::CreateView在每个静态窗口的窗格中创建视图。
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if((!m_wndSplitter1.CreateStatic(this,2,1)||
!m_wndPplitter2.CteateStatic(&m_wndSplitter1,1,2,WS_CHILD|
WS_VISIBLE,m_wndSplitter1.IdFromRowCol(1,0);
!m_wndSpitter2.Create(0,0,RUNTIME_CLASS(视图类如CPictureView),
CSize(128,0),pContext)||
!!m_wndSpitter2.Create(0,1,RUNTIME_CLASS(视图类如CPictureView),
CSize(128,0),pContext)||
!!m_wndSpitter1.Create(1,0,RUNTIME_CLASS(视图类如CPictureView),
CSize(0,0),pContext))
return FALSE;
return TRUE;
}
代码没有检证,仅供参考。
leechiyang 2005-03-27
  • 打赏
  • 举报
回复
帮你顶一下.
lonenomad 2005-03-27
  • 打赏
  • 举报
回复
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
//TODO: Add your specialized code here and/or call the base class
if((!m_wndSplitter1.CreateStatic(this,2,1)||
!m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(MyTreeView),CSize(0,0),pContext)||
!m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0))||
!m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(myListView),CSize(0,128),pContext)||
!m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(myListView),CSize(0,0),pContext)
))
return FALSE;
else
/*if(!m_wndSplitter1.CreateStatic(this,2,1)||
!m_wndSplitter1.CreateView(0,0,RUNTIME_CLASS(myListView),CSize(0,100),pContext)||
!m_wndSplitter2.CreateStatic(&m_wndSplitter1,1,2,WS_CHILD|WS_VISIBLE,m_wndSplitter1.IdFromRowCol(0,0))
!m_wndSplitter1.CreateView(1,0,RUNTIME_CLASS(MyTreeView),CSize(0,0),pContext))
return FALSE;*/
return TRUE;
}
晕死了,我水平有限啊,这回你看好用了没有。我调是过了。
solarhe 2005-03-27
  • 打赏
  • 举报
回复
原代码有很多错误,改完却发生诊断错误,麻烦你改一下!
solarhe 2005-03-26
  • 打赏
  • 举报
回复
期望着大家回帖!
solarhe 2005-03-26
  • 打赏
  • 举报
回复
在线等!

16,466

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧