Home   Artículos   Recursos   Foros   
Artíclos recientes publicados en Latindevelopers:

Visual C++: NSDoubleEdit: Un control para el manejo de números decimales en Visual C++.
Visual C++: Implementando una Calculadora en Visual C++
Visual C++: CCommandLine: Una clase para el uso de la linea de comando
Visual C++: Una clase para el manejo del Registro


aqui hay un error al hacer click en el checkbox

Aqui programadores en la plataforma Win32 con Visual C++ de Microsoft...

Moderador: latindeveloper

aqui hay un error al hacer click en el checkbox

Notapor Soujiro el Mar Ene 31, 2006 5:14 pm

Ahora si va en serio .
Esta es archivo de cabezera control.h(basada en Cform), aqui declaro mi puntero:
Código:

class CVtkMDIDoc;//para crear un puntero al documento
class Ccontrol : public CFormView
{
protected:
Ccontrol(); // protected constructor used by dynamic creation
DECLARE_DYNCREATE(Ccontrol)

// Form Data
public:
//{{AFX_DATA(Ccontrol)
enum { IDD = IDD_CONTROL };
BOOL m_Animar;
//}}AFX_DATA
CVtkMDIDoc* m_pDocument; // PUNTERO A MI DOCUMENTO
// Attributes
public:
...................




Bueno lo que sigue del codigo no es importante asi que lo he oviado .
Ahora vamos a control.cpp y en su constructor inicalizo mi puntero a NULL , despues observamos la funcion OnAnimar() que esta asociada a un checkbox que he creado, al momento de presionar el checkbox supuestamente actualizo y con mi puntero me dirijo a la funcion OnCmdMsg(...) que se encuentra en VtkMDIDoc.cpp


Código:



// control.cpp : implementation file
//

#include "stdafx.h"
#include "VtkMDI.h"
#include "control.h"
////////////////
#include "VtkMDIDoc.h" //para que pueda comunicarse con el doc
#include "VtkMDIView.h"
////////////////
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Ccontrol

IMPLEMENT_DYNCREATE(Ccontrol, CFormView)

Ccontrol::Ccontrol()
: CFormView(Ccontrol::IDD)
{
//{{AFX_DATA_INIT(Ccontrol)
m_Animar = FALSE;
//}}AFX_DATA_INIT
m_pDocument = NULL;
}

void Ccontrol::OnAnimar()
{
// TODO: Add your control notification handler code here
UpdateData();
m_pDocument->OnCmdMsg(WM_ANIMATION, m_Animar, NULL, NULL);

}



Ahora vamos a VtkMDIDoc.cpp

Código:


// VtkMDIDoc.cpp : implementation of the CVtkMDIDoc class
//

#include "stdafx.h"
#include "VtkMDI.h"

#include "VtkMDIDoc.h"
#include "ChildFrm.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

BOOL CVtkMDIDoc::OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo)
{
// TODO: Add your specialized code here and/or call the base class
switch( nID )
{ case WM_ANIMATION:
if( nCode )
UpdateAllViews( NULL, WM_START_ANIMATION );
else
UpdateAllViews( NULL, WM_FINISH_ANIMATION );
return TRUE;
}

return CDocument::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
}



Bueno es a si que lo he hecho para poder ir a la clase CVtkMDIDoc y despues dirigirme a la clase CVtkMDIView.cpp(que es donde quiero llegar)Con la funcion UpdateAllViews actualizo todas las vistas y
en CVtkMDIView la funcion OnUpdate(...) recibe los cambios(bueno por lo menos eso me dijeron no estoy seguro , pero el error no se origina alli)

Código:



void CVtkMDIView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Add your specialized code here and/or call the base class

if( lHint == WM_START_ANIMATION )
{
UINT t = SetTimer( IDT_TIMER, 100 , NULL);
return;
}
else if( lHint == WM_FINISH_ANIMATION )
{
KillTimer(IDT_TIMER);
return;
}


}

void CVtkMDIView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
///////////////////////////////////
if( nIDEvent == IDT_TIMER )
{
vtkCamera* pCamera = ren->GetActiveCamera();
pCamera->Azimuth(10);
pCamera->Roll(10);
//Invalidate(FALSE);
return;
}
/////////////////////////////////////

CView::OnTimer(nIDEvent);
}


El error de violacion de acceso se da en tiempo de ejecucion cuando hago click en el checkbox que he creado.

Una preguntilla mas, ¿Puedo ir de una vista a otra sin pasar por CVtkMDIDoc(en mi caso)?. Por que me dijeron que el Doc sirve para la comunicacion entre varias vistas por eso lo hice asi.
Ademas todavia no domino los mensajes(seguro ya se dieron cuenta, no se para que sirven cada uno de ellos ) asi que agradecería un tutorial o cualquier cosa que hable de eso por favor.
Muy agradecido de antemano me despido.
Atte José. :cry: :cry:
Soujiro
Novato
Novato
 
Mensajes: 17
Registrado: Mar Ene 03, 2006 2:39 pm

Re: aqui hay un error al hacer click en el checkbox

Notapor latindeveloper el Mar Ene 31, 2006 6:48 pm

Si inicializas tu variable m_pDocument en NULL, en tu codigo no veo un lugar donde lo inicialices o le hagas apuntar a tu documento.

Si tu variable m_pDocument causa un problema debe ser en este punto.

m_pDocument->OnCmdMsg(WM_ANIMATION, m_Animar, NULL, NULL);

Por que obviamente sigue siendo NULL.
Imagen
Avatar de Usuario
latindeveloper
Administrador
Administrador
 
Mensajes: 1061
Registrado: Lun Jun 02, 2003 8:30 pm
Ubicación: Peru


Volver a Visual C++

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados