哪位大哥帮帮我啊?关于分割窗口
我想把一个SDI用静态窗口分成两个,但每次都出错提示:Debug Assersion Failed!winsplit.cpp的334行出错,如果用运态的分就没事,到底怎么搞的?多谢了 问题点数:20、回复次数:16Top
1 楼kangde(无酒而醉谓之青春)回复于 2003-05-04 08:50:55 得分 0
你的代码?Top
2 楼T655(小东子)回复于 2003-05-04 09:02:56 得分 0
我是在向导的第4步里选ADVANCED,然后选WINSTYLE中的SPLIT的,然后把create改为createstatic,然后修改参数,但是VC不是提示出错在哪一行,而是出现一个提示框,DEBUG ASSERTION FAILED!
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT /*lpcs*/,
CCreateContext* pContext)
{
return m_wndSplitter.CreateStatic(this,
1, 2,
WS_CHILD|WS_VISIBLE,
AFX_IDW_PANE_FIRST);
}
Top
3 楼kangde(无酒而醉谓之青春)回复于 2003-05-04 09:05:30 得分 15
BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
m_wndSplitter.CreateStatic(this,1,2);
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CDispartView),CSize(122,50),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CAnGRView),CSize(0,0),pContext);
return TRUE;
}Top
4 楼kangde(无酒而醉谓之青春)回复于 2003-05-04 09:09:16 得分 0
分割视图后应该分别关联视图类Top
5 楼T655(小东子)回复于 2003-05-04 09:16:54 得分 0
谢谢你,独孤飘,现在那个出错窗口是没有了,是不是只要把那两个VIEW改成我自己处理的VIEW就行了吗?可是那个出错是因为什么呢为什么不是通常的提示出错在哪一行呢?Top
6 楼kangde(无酒而醉谓之青春)回复于 2003-05-04 09:18:26 得分 0
估计是分割后,发现没有关联视图,进行了一次ASSERTTop
7 楼T655(小东子)回复于 2003-05-04 10:20:20 得分 0
我把你的代码中的两个VIEW改成自己的VIEW之后还是出错.
m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CTest4View),CSize(122,50),pContext);
m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTest4View),CSize(0,0),pContext);
CTest4View是原来的名字,我并没有改过但是出错
C:\Program Files\Microsoft Visual Studio\MyProjects\test4\MainFrm.cpp(83) : error C2653: 'CTest4View' : is not a class or namespace name
C:\Program Files\Microsoft Visual Studio\MyProjects\test4\MainFrm.cpp(83) : error C2065: 'classCTest4View' : undeclared identifier
C:\Program Files\Microsoft Visual Studio\MyProjects\test4\MainFrm.cpp(84) : error C2653: 'CTest4View' : is not a class or namespace name
Error executing cl.exe.
Top
8 楼kangde(无酒而醉谓之青春)回复于 2003-05-04 10:54:57 得分 0
包含新视图类的头文件啊Top
9 楼T655(小东子)回复于 2003-05-04 12:45:07 得分 0
谢谢!!但是又出现新问题,请指教.
c:\program files\microsoft visual studio\myprojects\test4\test4view.h(21) : error C2143: syntax error : missing ';' before '*'
c:\program files\microsoft visual studio\myprojects\test4\test4view.h(21) : error C2501: 'CTest4Doc' : missing storage-class or type specifiers
c:\program files\microsoft visual studio\myprojects\test4\test4view.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers
Error executing cl.exe.
它指的第21行内容是: CTest4Doc* GetDocument();
Top
10 楼catchme(木刀)回复于 2003-05-04 13:01:23 得分 5
在这个文件的前面加
class CTest4Doc;就可以了Top
11 楼T655(小东子)回复于 2003-05-04 21:08:28 得分 0
谢谢木刀!!Top
12 楼nijian(永久磁体)回复于 2003-05-05 10:14:07 得分 0
能告诉我视图分割后怎么更新一个视图,而另外一个不更新。Top
13 楼BinaryPoet(二进制诗人)回复于 2003-05-05 18:23:38 得分 0
回答楼上的问题:
假设说你创建了一个垂直分割的视图,现在你只想更新右边的那个(类名就叫CMyRightView)。
在主窗口中添加函数GetRightPane函数如下:
CMyRightView* CMainFrame::GetRightPane()
{
CWnd* pWnd = m_wndSplitter.GetPane(0, 1);
CMyRightView* pView = DYNAMIC_DOWNCAST(CMyRightView, pWnd);
return pView;
}
只要得到了右边视图的指针,调用Invalidate()就可以了。
good luck!Top




