vc学习中....我在CMyDoc(多文档结构)中添加消息处理函数CMyDoc::OnFileOpen(),该函数中我放置了自己的文件打开代码,并在CMyDoc中添加了读写文件并创建数据结构的函数CmyDoc::ReadData()该函数从文本文件中读入数据并存再一个数组里该数组为CPoint数组,然后在CMyView::OnDraw(CDC *pDC)中使用了pDoc来获取从CMyDoc里的CPoint数组来画线。但程序运行到pDoc总是出现无效句柄的错误,为什么?而且我使用断点跟踪时,发现数据的确是读入了并存进了CPoint数组。在OnDraw函数中也使用了
if(pDoc->m_OpenFileFlag==0||pDoc->m_pFile==NULL)
return;来判断pDoc是否打开了文件
后来我怀疑在OnFileOpen时pDoc并没有指向我希望得CPoint数组,不知是不是对的这些疑问使我觉得对mfc的FrameWorks的工作情况很模糊,我弄不清楚OnNewDocument和OnOpenDocument的区别(看了一下msdn的文档发现这两个函数的解释几乎差不多),文档对象初始化后视图类也应该跟着变化可为什么我的视图类却没有, OnFileOpen应该放到CChildFrame里还是CMyDoc里,CChildFrame又是怎样来管理文档和视图的如果我在文档的构造函数里完成文件的打开和读入则pDoc可顺利的指向我希望得到的数据可这样会失去灵活性,还有个疑问就是为什么文档和视图的构造函数是保护的而不是公有的

解决方案 »

  1.   

    我找到了,呵呵,原来是我错误的使用了CObArray类,在使用的时候没有正确的初始化,我还以为是pDoc的错误使用而造成的内存错误呢,心里爽了。但我还是对mfc的框架结构不清楚,望高手指教
      

  2.   

    mfc框架不是一下就能学会的,多看看书,多做做东西,最好能读一下VC安装目录下的MFC部分源代码,当然开始有一定难度,可过几个月就好一些了,MFC太复杂,想一下就明白?不太可能,时间就是最好的手段!