MDI经过CSplitterWnd分割窗口后,原来的View中GetDocument返回空指针
MDI通过CSplitterWnd分割窗口后,原来的View中GetDocument返回空指针
正常情况,MDI的View通过GetDocument()能读到Doc的指针,这是OnDraw中最重要的语句。
但是我用CPlitterWnd分割窗口后,原来的View再取Doc的指针就是空的了。
这是什么原因呢?有没有其他办法读取?
------解决方案--------------------
你的View和你的Doc绑定了吗?只有绑定Doc的View类,调用GetDocument返回才不会是空。
你可以用CSplitterWnd拆分视图框架窗口,你是可以指定不同的View类,但是你的指定的View类不一定是和你的DOC类绑定在一起了。至于 是哪个View和DOC绑定在一起了,你可以看你的App类的InitInstance函数,或者自己使用的CCreateContext结构体相关。
------解决方案--------------------
你App类的InitInstance() 中,你new 的CSingleDocTemplate 或者CMultiDocTemplate中指定View类才是和Doc类绑定在一起的。
------解决方案--------------------
------解决方案--------------------
你说的原来的View指的是什么
你分割了窗体
不可能所有窗体用一个view吧
------解决方案--------------------
我好像也遇到过这种问题,可能是文件没有包含,如果是在MainFrm中分拆窗口
在MainFrm文件中需要同时包含Doc和View的头文件,如下:
#include " CWinTestDoc .h"
#include " CWinTestView.h"
不过,我的是SDI,可能你不是这个问题。
------解决方案--------------------
"在MDI工程中,在CMainFrame分拆窗口,"
MDI 中 CMainFrame 是个没用的 (空的)Frame.
正常情况,MDI的View通过GetDocument()能读到Doc的指针,这是OnDraw中最重要的语句。
但是我用CPlitterWnd分割窗口后,原来的View再取Doc的指针就是空的了。
这是什么原因呢?有没有其他办法读取?
------解决方案--------------------
你的View和你的Doc绑定了吗?只有绑定Doc的View类,调用GetDocument返回才不会是空。
你可以用CSplitterWnd拆分视图框架窗口,你是可以指定不同的View类,但是你的指定的View类不一定是和你的DOC类绑定在一起了。至于 是哪个View和DOC绑定在一起了,你可以看你的App类的InitInstance函数,或者自己使用的CCreateContext结构体相关。
------解决方案--------------------
你App类的InitInstance() 中,你new 的CSingleDocTemplate 或者CMultiDocTemplate中指定View类才是和Doc类绑定在一起的。
------解决方案--------------------
BOOL CViewfileApp::InitInstance()
{
...
// Raw
m_pRawTemplate = new CMultiDocTemplate(
IDR_RAWTYPE,
RUNTIME_CLASS(CViewfileDoc),
RUNTIME_CLASS(CRawFrame), // custom MDI child frame
RUNTIME_CLASS(CRawView));
AddDocTemplate(m_pRawTemplate);
// Dos header
m_pDOSTemplate = new CMultiDocTemplate(
IDR_DOSTYPE,
RUNTIME_CLASS(CViewfileDoc),
RUNTIME_CLASS(CDOSFrame), // custom MDI child frame
RUNTIME_CLASS(CDOSView));
AddDocTemplate(m_pDOSTemplate);
// Ne file
m_pNETemplate = new CMultiDocTemplate(
IDR_NETYPE,
RUNTIME_CLASS(CViewfileDoc),
RUNTIME_CLASS(CNECFrame), // custom MDI child frame
RUNTIME_CLASS(CNEView));
AddDocTemplate(m_pNETemplate);
// Le file
m_pLETemplate = new CMultiDocTemplate(
IDR_LETYPE,
RUNTIME_CLASS(CViewfileDoc),
RUNTIME_CLASS(CLECFrame), // custom MDI child frame
RUNTIME_CLASS(CLEView));
AddDocTemplate(m_pLETemplate);
// PE Portable Executable (PE) file
m_pPETemplate = new CMultiDocTemplate(
IDR_PETYPE,
RUNTIME_CLASS(CViewfileDoc),
RUNTIME_CLASS(CPECFrame), // custom MDI child frame
RUNTIME_CLASS(CPEView));
AddDocTemplate(m_pPETemplate);
....
------解决方案--------------------
你说的原来的View指的是什么
你分割了窗体
不可能所有窗体用一个view吧
------解决方案--------------------
我好像也遇到过这种问题,可能是文件没有包含,如果是在MainFrm中分拆窗口
在MainFrm文件中需要同时包含Doc和View的头文件,如下:
#include " CWinTestDoc .h"
#include " CWinTestView.h"
不过,我的是SDI,可能你不是这个问题。
------解决方案--------------------
"在MDI工程中,在CMainFrame分拆窗口,"
MDI 中 CMainFrame 是个没用的 (空的)Frame.