Antes que nada gracias por responder.
1ro. La Funcion que llama el dialogo es miembro de la clase Documento:
- Código: Seleccionar todo
void CShummanDoc::OnIngresodatos()
{
CDatosDlg dlg;
if(dlg.DoModal()==IDOK)
{
}
}
Llamo al dialogo asi, porque se supone que la clase CShummanDoc es la encargada de manejar la informacion osea:
Cada vez que se abra un nuevo documento desseriar la informacion
- Código: Seleccionar todo
CShummanDoc::CShummanDoc()
{
// TODO: add one-time construction code here
m_pSeriarDatos=new CObArray;
}
BOOL CShummanDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
//Verificar si existe el fichero
CFileStatus Estado;
if(CFile::GetStatus(pszNomArch,Estado))
{
CFile fiDatosShumman;
fiDatosShumman.Open(pszNomArch,CFile::modeRead);
CArchive arDatosShumman(&fiDatosShumman,CArchive::load);
//Eliminar el objeto anterior
delete m_pSeriarDatos;
//Cargar el Array con los datos del fichero (Deseriar)
arDatosShumman>>m_pSeriarDatos;
//Cerrar
arDatosShumman.Close();
fiDatosShumman.Close();
m_bExisteElementos=true;
}
else
m_bExisteElementos=false;
return TRUE;
}
2 do. El array (m_pSeriarDatos) que necesito cargar en el dialogo CDatosDlg es un puntero a CObArray. Osea:
- Código: Seleccionar todo
class CShummanDoc : public CDocument
{
protected: // create from serialization only
CShummanDoc();
DECLARE_DYNCREATE(CShummanDoc)
public:
bool m_bExisteElementos;
bool m_bDatosValidos;
CObArray *m_pSeriarDatos; // <- Este es el Array
bool m_bArrayModificado;
};
Cuando el usuario ingresa al dialogo vera 4 Listas con datos cargados, Él podra modificar los datos o Aceptarlos tal como estan.
Luego en la vista Se vera graficada dos curvas en base a los datos Aceptados. Ya que la Vista Tiene un puntero que Accede al Documento.
CShummanDoc* pDoc = GetDocument();
Actualmente estoy cargando los datos en el dialogo duplicando la informacion asi:
- Código: Seleccionar todo
void CShummanDoc::OnIngresodatos()
{
int iNumElem,ind;
CDatosDlg dlg;
//Si el array tiene elementos copiarlos en el dlg
if(m_bExisteElementos)
{
iNumElem=m_pSeriarDatos->GetSize();
CSeriarDatos *pObjeto;
for(ind=0;ind<iNumElem;ind++)
{
pObjeto=(CSeriarDatos*)m_pSeriarDatos->GetAt(ind);
dlg.m_aStrMallas[ind]=pObjeto->m_sMallas;
dlg.m_aDouMicr[ind]=pObjeto->m_dMicrones;
dlg.m_aDouAlim[ind]=pObjeto->m_dPeAlim;
dlg.m_aDouDesc[ind]=pObjeto->m_dPeDesc;
}
dlg.m_iMax=iNumElem;
}
//Si se acepta el ingreso de datos
if(dlg.DoModal()==IDOK)
{
//...
}
UpdateAllViews(NULL);//Para que se actualizen las vistas
}
Lo cual me parece ineficiente, por eso quiero saber como obtengo un puntero desde el Dialogo (CDatosDlg) Hacia la clase Documento (CShummanDoc)
Espero que me puedad ayudar. Gracias
Johnny.