CWinApp *MyApp = AfxGetApp();
POSITION pos = MyApp->GetFirstDocTemplatePosition();
CDocTemplate *Templ = MyApp->GetNextDocTemplate(pos);
pos = Templ->GetFirstDocPosition();
CGRaf2Doc *DocData = (CGRaf2Doc *)Templ->GetNextDoc(pos);
Доступ к элементам класса
// Graf2Doc.h : interface of the CGraf2Doc class
//
#pragma once
#include "afxtempl.h"
class CGraf2Doc : public CDocument
{
protected: // create from serialization only
CGraf2Doc();
DECLARE_DYNCREATE(CGraf2Doc)
// Attributes
public:
CArray <CPoint,CPoint>mArray;
CArray <int>mint;
CArray <int>C1;
CArray <int>C2;
....................
///////////////////////////////////////////
//mrClass.cpp
#include "StdAfx.h"
#include "mRClass.h"
#include "mArrow.h"
#include "Graf2Doc.h"
#include "Graf2View.h"
#include <math.h>
mRClass::mRClass(void)
{
}
mRClass::~mRClass(void)
{
}
mstruct mRClass::Rastr(int i, float minrast, CPoint point)
{
//функция находит координаты точки фигуры, под номером i (в массиве mArray), ближайшей
//к точке с координатами point
//minrast - минимальное, установленное на данный момент, расстояние до фигуры
CGraf2Doc* pDoc;
int fa1;
fa1 = pDoc->mint.GetAt(i);
Если так написать, то fa1 открываются все элементы CGraf2Doc, компилируется всё нормально, но при выполнении, пишет, что вначале pDoc инициализировать нужно.
В методах класса CGraf2View она инициализируется
CGraf2Doc* pDoc = GetDocument();
Но в моём классе, даже если я его делаю наследником CView(от этого класса наследуется CGraf2View), в лучшем случае пишет ошибку, что CGraf2Doc и GetDocument() вообще несовместимые вещи.
Что такого описано в классе CGraf2View, что в нём всё работает нормально?
Или может есть какой-нибудь другой способ выхода из этой ситуации?
P.S. пробовал создавать класснаследник CObject(в нём есть сериализация), но не нашёл, как добавить в него методы работы с контейнерными типами данных, как то: Add, GetAt(), GetCount, SetAtGrow()...
Заранее благодарю за ответ.
Код:
(*.cpp)
#ifdef _DEBUG
void mRClass::AssertValid() const
{
CView::AssertValid();
}
void mRClass::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CGraf2Doc* mRClass::GetDocument() const // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CGraf2Doc)));
return (CGraf2Doc*)m_pDocument;
}
#endif //_DEBUG
и про
(*.h)
#ifdef _DEBUG
virtual void AssertValid() const;
virtual void Dump(CDumpContext& dc) const;
#endif
};
#ifndef _DEBUG // debug version in Graf2View.cpp
inline CGraf2Doc* mRClass::GetDocument() const
{ return reinterpret_cast<CGraf2Doc*>(m_pDocument); }
#endif
Отдельное спасибо Эксперту!