菜鸟问题:各位兄弟帮帮忙呀,一个关于SDI程序显示文件的问题??????

fieldsoft 2001-12-16 04:22:27
我程序分了三个视窗:如下

----------------------------------------------------------
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
----------------------------------------------------------
对应的视图类为:
CLeftView:CView CMidView:CListView CRightView:CEditView
向导生成的类为:CSplitterApp CSplitterDoc CSplitterView MainFrame
我如何在右边这个视里显示一个文本文件呢?
不好意思,问题比较菜,各位大侠帮帮忙呀!谢谢!
...全文
462 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
fieldsoft 2001-12-17
  • 打赏
  • 举报
回复
呵呵,还好你不在,不然又得麻烦您了
问题发现了,原来不知道什么时候CRightView类被我重载了OnPaint函数
好了,总算可以加分了
fieldsoft 2001-12-17
  • 打赏
  • 举报
回复
UpdateAllViews我有调用也一样
fieldsoft 2001-12-17
  • 打赏
  • 举报
回复
谢谢啊!收到了
我那样分法果然是那个CEditView没得到
我现在内容可收到,不过还有一点显示的问题
屏幕不会刷新,也就是汉字不会显示出来,但我知道有内容进来了,滚动条有变化
只有我用鼠标去选中时,选中部分才会显示汉字
这又是什么问题呢?你有没有碰到过啊
看看你的源代码先。。。。。。
Kummer 2001-12-17
  • 打赏
  • 举报
回复
发了,收到没有
fieldsoft 2001-12-17
  • 打赏
  • 举报
回复
to Kummer:
谢谢啊!奇怪我昨晚也有在,怎么没看到你的回复呀!
真是太谢谢你了
我那种分法也是学别人的,正如你所说,就是要重载OnSize才能看到
我到现在还不明白为什么
你那样分法我也试过,好象也不行,不知道还有哪里没设置好
谢谢你的源代码,gga7959@163.com
再次感谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
等你看到后再加分啊。。。。。。。。。。。。。。。
Kummer 2001-12-17
  • 打赏
  • 举报
回复
不要给那个pig1(猪) 分哟
pig1 2001-12-17
  • 打赏
  • 举报
回复
因为一个人不能连续写多篇稿,
所以我零时申请了一个ID(猪)回复你
现在还有什么问题吗,如果不行的话,Q我
56633472,助人为快乐之本
pig1 2001-12-17
  • 打赏
  • 举报
回复
我后来实现了你的方法,好像要从载OnSize才能看到那个Splitter是不是
void CSplitterView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);

m_wndSplitter.MoveWindow(-2,-2,cx+4,cy+4);
}

注意,此时的View的位置如下
void CTestEditSingleDoc::Serialize(CArchive& ar)
{
// CEditView contains an edit control which handles all serialization
POSITION pos=m_viewList.GetHeadPosition();
CView *pV=m_viewList.GetNext(pos);
//此时pV为LeftView
pV=m_viewList.GetNext(pos);
//此时pV为SplitterView

pV=m_viewList.GetNext(pos);
//此时pV为MidView
pV=m_viewList.GetNext(pos);
//此时pV为RightView
(CEditView*)pV->SerializeRaw(ar);
}

pig1 2001-12-17
  • 打赏
  • 举报
回复
我是猪,一头可爱的小猪
Kummer 2001-12-17
  • 打赏
  • 举报
回复
我估计你的错误就在那个EditView,你得到的根本不是EditView
如果你加入了那个SplitterView,则EditView可能在更后面

你可以用如下代码跟踪以下,看看那个pV到底是不是EditView
void CTestEditSingleDoc::Serialize(CArchive& ar)
{
// CEditView contains an edit control which handles all serialization
POSITION pos=m_viewList.GetHeadPosition();
CEditView *pV=((CEditView*)m_viewList.GetNext(pos));
pV=((CEditView*)m_viewList.GetNext(pos));
pV=((CEditView*)m_viewList.GetNext(pos));
pV->SerializeRaw(ar);
}

而认真的想了一下你的实现,我不知道你能得到什么样的效果,但依我的理解,应该看不到那个EditView才对,
1。你可以按我上面的方法实现分成三个View
2。按如下的方法分成三个View
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// CG: The following block was added by the Splitter Bar component.
if (!m_wndSplitter.CreateStatic(this, 1, 2))
return FALSE;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext)
)
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
if(m_wndSplitter2.CreateStatic(&m_wndSplitter,1,2,WS_CHILD|WS_VISIBLE, m_wndSplitter.IdFromRowCol(0, 1))==NULL)
return false;
//注意此时是将m_wndSpliiter中的pane(0,1)分割
m_wndSplitter2.CreateView(0,0,RUNTIME_CLASS(CMidView),CSize(400,300),pContext); //将CView3类连接到第二个分栏对象的0行1列
m_wndSplitter2.CreateView(0,1,RUNTIME_CLASS(CTestEditSingleView),CSize(400,300),pContext);
return TRUE;
}
Kummer 2001-12-16
  • 打赏
  • 举报
回复
我看你的问题可能出在EditView上,
在Doc中的
void CTestEditSingleDoc::Serialize(CArchive& ar)
{
POSITION pos=m_viewList.GetHeadPosition();
m_viewList.GetNext(pos);
m_viewList.GetNext(pos);
((CEditView*)m_viewList.GetNext(pos))->SerializeRaw(ar);
}

注意那个m_viewList.GetNext(pos))->SerializeRaw(ar)一定要是那个EditView
Kummer 2001-12-16
  • 打赏
  • 举报
回复
你现在在吗,有什么问题,不如我把我的源代码发给你,
fieldsoft 2001-12-16
  • 打赏
  • 举报
回复
最后推一把
fieldsoft 2001-12-16
  • 打赏
  • 举报
回复
出错原因我找到了,好像是多写了一个m_viewList.GetNext(pos);
不过我还是不能显示一个文本文件,我是这样做的:
void CRightView::OnTest()
{
CSplitterDoc* pDoc=GetDocument();
pDoc->OnOpenDocument("g:\\info\\test.txt");
}
CSplitterDoc* CRightView::GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSplitterDoc)));
return (CSplitterDoc*)m_pDocument;
}
我按这个按钮时为什么不会显示这个文件内容呢?各位高手帮忙看看,谢谢!
fieldsoft 2001-12-16
  • 打赏
  • 举报
回复
to Kummer:
还有没有在啊?
我按你所说的好像不行,运行的时候出错了,提示dbgheap.c 1011行出错
我分割视窗是用了两步,如下:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!m_wndSplitter.CreateStatic(this, 1, 2))
{
TRACE0("Failed to create splitter window\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView),
CSize(100, 0), pContext))
{
TRACE0("Failed to create CLeftView\n");
return FALSE;
}
if (!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CSplitterView),
CSize(0, 0), pContext))
{
TRACE0("Failed to create CSplitterView\n");
return FALSE;
}
SetActiveView((CView*) m_wndSplitter.GetPane(0, 0));
return TRUE;
}
int CSplitterView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;

m_wndSplitter.CreateStatic(this, 1,2);

CCreateContext *pContext = (CCreateContext*)lpCreateStruct->lpCreateParams;

// Create two views
if (!m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CMidView),
CSize(175,0), pContext))
{
TRACE0("Failed to create CMidView\n");
return -1;
}

if (!m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CRightView),
CSize(0,0), pContext))
{
TRACE0("Failed to create CRightView\n");
return -1;
}
return 0;
}
Kummer 2001-12-16
  • 打赏
  • 举报
回复
上面的CTestEditSingleView相当于你的CRightView
Kummer 2001-12-16
  • 打赏
  • 举报
回复
很简单,先将视图和文档关联起来
(不知道你的Splitter是怎样生成的,如果使用Splitter Component,可以在CMainFrame的
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)中将其关联,如:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
if (!m_wndSplitter.CreateStatic(this, 1, 3))
return FALSE;
if (!m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftView), CSize(100, 100), pContext) ||
!m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CMidView), CSize(100, 100), pContext) ||
!m_wndSplitter.CreateView(0, 2, RUNTIME_CLASS(CTestEditSingleView), CSize(100, 100), pContext)
)
//给该文档创建4个视图,
{
m_wndSplitter.DestroyWindow();
return FALSE;
}
return true;
}
在Doc中的
void CTestEditSingleDoc::Serialize(CArchive& ar)
{
// CEditView contains an edit control which handles all serialization
POSITION pos=m_viewList.GetHeadPosition();
m_viewList.GetNext(pos);
m_viewList.GetNext(pos);
((CEditView*)m_viewList.GetNext(pos))->SerializeRaw(ar);
}
xiaoxiaohan 2001-12-16
  • 打赏
  • 举报
回复
用CDC画。
fieldsoft 2001-12-16
  • 打赏
  • 举报
回复
怎么没人帮我呀?
fieldsoft 2001-12-16
  • 打赏
  • 举报
回复
啊,图怎么变成这样了
右边多出来的是没有的
加载更多回复(1)

16,472

社区成员

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

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

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