{
m_wndSplitter.CreateStatic(this,2,1);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(100,100),pContext);
m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CView2),CSize(100,100),pContext);
return TRUE;
}
运行时候程序非法退出,换到文档/视图结构程序就正常,难到拆分窗口必须要文档/视图结构的支持吗?网上找遍了都没找到答案,哪位高手知道呀?
22 个解决方案
#1
非文档/视图结构程序?
看你上面的代码,那你用的是什么结构?
看你上面的代码,那你用的是什么结构?
#2
就在用向导生成框架时,没有选择 文档/视图结构支持
#3
也就是程序中没有文档类
#4
没人知道吗?自己先顶一下……
#5
if (m_wndSplitter.CreateStatic(this,2,1))
{
CRect rect;
GetClientRect(&rect);
CSize size = rect.Size();
size.cy-=150;
if (m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CChatView),size,pContext))
{
if (m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CSendView),CSize(0,0),pContext))
{
SetActiveView((CView*)m_wndSplitter.GetPane(1,0));
return TRUE;
}
}
}
{
CRect rect;
GetClientRect(&rect);
CSize size = rect.Size();
size.cy-=150;
if (m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CChatView),size,pContext))
{
if (m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CSendView),CSize(0,0),pContext))
{
SetActiveView((CView*)m_wndSplitter.GetPane(1,0));
return TRUE;
}
}
}
#6
和有没有 选择 文档/视图结构支持 没关系。如果实在不行,第一个view用系统默认生成的那个类。
#7
你的cview1和cview2是不是从cview继承而来,如果是的话,则必须是文档/视图结构,否则会出错
如果不是文档/视图结构,则cview1和cview2应从cwnd继承
如果不是文档/视图结构,则cview1和cview2应从cwnd继承
#8
谢谢大家的帮助,我新建了个单文档程序,没有选择“文档/视图结构支持”。
1.我试过了toxyboy(长的比较无奈) 的代码,还是要出错。
2.使用系统默认生成的View类,还是要出错。
3.CView1和CView2从CWnd派生,还是要出错。
如果大家有时间,能亲自实践一下吗?先谢谢了,这个问题我翻便了网络,找到一个和我一样的问题,但最后还是没解决。。。
1.我试过了toxyboy(长的比较无奈) 的代码,还是要出错。
2.使用系统默认生成的View类,还是要出错。
3.CView1和CView2从CWnd派生,还是要出错。
如果大家有时间,能亲自实践一下吗?先谢谢了,这个问题我翻便了网络,找到一个和我一样的问题,但最后还是没解决。。。
#9
你的窗口切分,好象没有对其进行初始化和重新布局。
我只说我的方法:
你建的应该是基于多文档的工程,工程里有一个已有的CView类(例你的工程是test,它就为CTestView),你新建一个CView 类(假如为CDrawView),那么你在CChildFrame类中的OnCreateClient事件里添加以下代码即可:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTestView),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CDrawView),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
我只说我的方法:
你建的应该是基于多文档的工程,工程里有一个已有的CView类(例你的工程是test,它就为CTestView),你新建一个CView 类(假如为CDrawView),那么你在CChildFrame类中的OnCreateClient事件里添加以下代码即可:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTestView),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CDrawView),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
#10
我新建的工程确实是建立的单文档程序,没有选择“文档/视图结构支持”。
工程名:test
工程中自动有的类:CAboutDlg、CChildView、CMainFrame、CtestApp。
照您所说,我这样写:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
还是要出错。
可是只要是在建立工程时的向导里选择了“文档/视图结构支持”,就一切正常了,可是我现在做的东西是没有“文档/视图结构支持”的,又需要拆分窗口,真是急死人呐!
工程名:test
工程中自动有的类:CAboutDlg、CChildView、CMainFrame、CtestApp。
照您所说,我这样写:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
还是要出错。
可是只要是在建立工程时的向导里选择了“文档/视图结构支持”,就一切正常了,可是我现在做的东西是没有“文档/视图结构支持”的,又需要拆分窗口,真是急死人呐!
#11
从你上面的话里,我看你建的是多文档工程,因为你的自动类中出现了CChildView类。
我是过了你的方法,的确通不过。编译通过,但程序运行不了,出现系统的内存错误。
我将上面的代码放到CChildFrame下,运行正常了。
我是过了你的方法,的确通不过。编译通过,但程序运行不了,出现系统的内存错误。
我将上面的代码放到CChildFrame下,运行正常了。
#12
我有个疑问,你说没有“文档/视图结构支持”的支持,是说在工程前期的设定基类选的不是CView吗?
#13
我建立的确实是单文档应用程序呀(向导第一步我选择的是单文档),单文档程序里面也有CChildView。
另外,我重新建立了个多文档的,照您的说法,还是编译通过,运行时候内存错误!
还有,我说的没有“文档/视图结构支持”是指,在向导第一步的时候,有个“文档/视图结构支持”(英文版的为“Document/View architecture support”),它前面的复选框没有选中。这样,在生成的自动类里面就没有文档类了。
另外,我重新建立了个多文档的,照您的说法,还是编译通过,运行时候内存错误!
还有,我说的没有“文档/视图结构支持”是指,在向导第一步的时候,有个“文档/视图结构支持”(英文版的为“Document/View architecture support”),它前面的复选框没有选中。这样,在生成的自动类里面就没有文档类了。
#14
哦,对,是我搞错了。
我也是刚学的,可能帮不了你。
但是我只要将上面的代码放在CMainFrame里,就会出错,可能主窗口是不能用于切分的。
帮不了你了
我也是刚学的,可能帮不了你。
但是我只要将上面的代码放在CMainFrame里,就会出错,可能主窗口是不能用于切分的。
帮不了你了
#15
你可以找书vc++6.0技术内幕,上面有一个例子,照做一遍就可以了
#16
麻烦大家了,《vc++6.0技术内幕》这本书我买了的,上面的例子也是基于“文档/视图结构支持”的,我就从来没看到过不用“文档/视图结构支持”拆分窗口的,哎,这个问题真麻烦呀!
#17
实在不行只有自己写个类通过WM_SIZE来模拟了。。。不过自己写好麻烦。。。还不一定好。。。
#18
只要有VIEW类就可以的
#19
up
#20
我做过 类似的 非文档/视图结构程序中拆分窗口
只是没有用它的cview 而已 用自己的view类 成功
不过 确实有很多问题 所以建议最好不要做非文档的
因为它涉及 mfc底层的东西,而且存在mfc 的一个bug
编程编 的越多 mfc的 bug你将发现的越多
只是没有用它的cview 而已 用自己的view类 成功
不过 确实有很多问题 所以建议最好不要做非文档的
因为它涉及 mfc底层的东西,而且存在mfc 的一个bug
编程编 的越多 mfc的 bug你将发现的越多
#21
不要用mfc的文档视图机制,业务与显示耦合太重,太烂了,自己写一个拆分窗口的类就行了,
#22
不要文档和视图结构也是可以的.就是在对话框里你也可以分割窗口出来.你看看CODEPROJECT上关于分割条的例子.挺详细的.
#1
非文档/视图结构程序?
看你上面的代码,那你用的是什么结构?
看你上面的代码,那你用的是什么结构?
#2
就在用向导生成框架时,没有选择 文档/视图结构支持
#3
也就是程序中没有文档类
#4
没人知道吗?自己先顶一下……
#5
if (m_wndSplitter.CreateStatic(this,2,1))
{
CRect rect;
GetClientRect(&rect);
CSize size = rect.Size();
size.cy-=150;
if (m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CChatView),size,pContext))
{
if (m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CSendView),CSize(0,0),pContext))
{
SetActiveView((CView*)m_wndSplitter.GetPane(1,0));
return TRUE;
}
}
}
{
CRect rect;
GetClientRect(&rect);
CSize size = rect.Size();
size.cy-=150;
if (m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CChatView),size,pContext))
{
if (m_wndSplitter.CreateView(1,0,RUNTIME_CLASS(CSendView),CSize(0,0),pContext))
{
SetActiveView((CView*)m_wndSplitter.GetPane(1,0));
return TRUE;
}
}
}
#6
和有没有 选择 文档/视图结构支持 没关系。如果实在不行,第一个view用系统默认生成的那个类。
#7
你的cview1和cview2是不是从cview继承而来,如果是的话,则必须是文档/视图结构,否则会出错
如果不是文档/视图结构,则cview1和cview2应从cwnd继承
如果不是文档/视图结构,则cview1和cview2应从cwnd继承
#8
谢谢大家的帮助,我新建了个单文档程序,没有选择“文档/视图结构支持”。
1.我试过了toxyboy(长的比较无奈) 的代码,还是要出错。
2.使用系统默认生成的View类,还是要出错。
3.CView1和CView2从CWnd派生,还是要出错。
如果大家有时间,能亲自实践一下吗?先谢谢了,这个问题我翻便了网络,找到一个和我一样的问题,但最后还是没解决。。。
1.我试过了toxyboy(长的比较无奈) 的代码,还是要出错。
2.使用系统默认生成的View类,还是要出错。
3.CView1和CView2从CWnd派生,还是要出错。
如果大家有时间,能亲自实践一下吗?先谢谢了,这个问题我翻便了网络,找到一个和我一样的问题,但最后还是没解决。。。
#9
你的窗口切分,好象没有对其进行初始化和重新布局。
我只说我的方法:
你建的应该是基于多文档的工程,工程里有一个已有的CView类(例你的工程是test,它就为CTestView),你新建一个CView 类(假如为CDrawView),那么你在CChildFrame类中的OnCreateClient事件里添加以下代码即可:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTestView),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CDrawView),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
我只说我的方法:
你建的应该是基于多文档的工程,工程里有一个已有的CView类(例你的工程是test,它就为CTestView),你新建一个CView 类(假如为CDrawView),那么你在CChildFrame类中的OnCreateClient事件里添加以下代码即可:
BOOL CChildFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTestView),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CDrawView),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
#10
我新建的工程确实是建立的单文档程序,没有选择“文档/视图结构支持”。
工程名:test
工程中自动有的类:CAboutDlg、CChildView、CMainFrame、CtestApp。
照您所说,我这样写:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
还是要出错。
可是只要是在建立工程时的向导里选择了“文档/视图结构支持”,就一切正常了,可是我现在做的东西是没有“文档/视图结构支持”的,又需要拆分窗口,真是急死人呐!
工程名:test
工程中自动有的类:CAboutDlg、CChildView、CMainFrame、CtestApp。
照您所说,我这样写:
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
CRect rect;
this->GetWindowRect(&rect);
BOOL bRes=m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(0,0),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CView2),CSize(0,0),pContext);
m_wndSplitter.SetColumnInfo(0,rect.Width()/2,10);
m_wndSplitter.SetColumnInfo(1,rect.Width()/2,10);//对切分的窗体进行初始化
m_wndSplitter.RecalcLayout();//对窗体进行重新布局
//return CMDIChildWnd::OnCreateClient(lpcs, pContext);
return bRes;
}
还是要出错。
可是只要是在建立工程时的向导里选择了“文档/视图结构支持”,就一切正常了,可是我现在做的东西是没有“文档/视图结构支持”的,又需要拆分窗口,真是急死人呐!
#11
从你上面的话里,我看你建的是多文档工程,因为你的自动类中出现了CChildView类。
我是过了你的方法,的确通不过。编译通过,但程序运行不了,出现系统的内存错误。
我将上面的代码放到CChildFrame下,运行正常了。
我是过了你的方法,的确通不过。编译通过,但程序运行不了,出现系统的内存错误。
我将上面的代码放到CChildFrame下,运行正常了。
#12
我有个疑问,你说没有“文档/视图结构支持”的支持,是说在工程前期的设定基类选的不是CView吗?
#13
我建立的确实是单文档应用程序呀(向导第一步我选择的是单文档),单文档程序里面也有CChildView。
另外,我重新建立了个多文档的,照您的说法,还是编译通过,运行时候内存错误!
还有,我说的没有“文档/视图结构支持”是指,在向导第一步的时候,有个“文档/视图结构支持”(英文版的为“Document/View architecture support”),它前面的复选框没有选中。这样,在生成的自动类里面就没有文档类了。
另外,我重新建立了个多文档的,照您的说法,还是编译通过,运行时候内存错误!
还有,我说的没有“文档/视图结构支持”是指,在向导第一步的时候,有个“文档/视图结构支持”(英文版的为“Document/View architecture support”),它前面的复选框没有选中。这样,在生成的自动类里面就没有文档类了。
#14
哦,对,是我搞错了。
我也是刚学的,可能帮不了你。
但是我只要将上面的代码放在CMainFrame里,就会出错,可能主窗口是不能用于切分的。
帮不了你了
我也是刚学的,可能帮不了你。
但是我只要将上面的代码放在CMainFrame里,就会出错,可能主窗口是不能用于切分的。
帮不了你了
#15
你可以找书vc++6.0技术内幕,上面有一个例子,照做一遍就可以了
#16
麻烦大家了,《vc++6.0技术内幕》这本书我买了的,上面的例子也是基于“文档/视图结构支持”的,我就从来没看到过不用“文档/视图结构支持”拆分窗口的,哎,这个问题真麻烦呀!
#17
实在不行只有自己写个类通过WM_SIZE来模拟了。。。不过自己写好麻烦。。。还不一定好。。。
#18
只要有VIEW类就可以的
#19
up
#20
我做过 类似的 非文档/视图结构程序中拆分窗口
只是没有用它的cview 而已 用自己的view类 成功
不过 确实有很多问题 所以建议最好不要做非文档的
因为它涉及 mfc底层的东西,而且存在mfc 的一个bug
编程编 的越多 mfc的 bug你将发现的越多
只是没有用它的cview 而已 用自己的view类 成功
不过 确实有很多问题 所以建议最好不要做非文档的
因为它涉及 mfc底层的东西,而且存在mfc 的一个bug
编程编 的越多 mfc的 bug你将发现的越多
#21
不要用mfc的文档视图机制,业务与显示耦合太重,太烂了,自己写一个拆分窗口的类就行了,
#22
不要文档和视图结构也是可以的.就是在对话框里你也可以分割窗口出来.你看看CODEPROJECT上关于分割条的例子.挺详细的.