Hola,
1. La clase CExp_Inv es la que contiene al control tab con los dialogos. el codigo con el que agregas los dialogos como un elemento del tab es :
m_tabMain.AddPage( IDD_CONGRESO, RUNTIME_CLASS( CCongreso ), _T("Congreso/Conferencia Cientifíca") );
m_tabMain.AddPage( IDD_PROYECTO, RUNTIME_CLASS( CProyecto ), _T("Proyecto") );
m_tabMain.AddPage( IDD_PUBLIC_CIENT, RUNTIME_CLASS( CPublic_Cient ), _T("Publicación Científica") );
Notar que estas inicializando las clases con RUNTIME_CLASS, en ningun momento le pasas un apuntador a un dialogo como variable. Si el control tab es quien contiene al dialogo CCongreso entonces ése es el dialogo padre (parent). (Pero creo que en realidad la variable al principio es NULL)
CCongreso::CCongreso(CInv_CMDatosCurr* pParent /*=NULL*/)
Entonces jamas se llega a identificar a donde apunta la variable CInv_CMDatosCurr* pParent .
2. Ahora en la clase CCongreso hay una variable CInv_CMDatosCurr* m_pPrincipal; que debería inicializarse en el constructor de la clase, pero no lo hace por lo explicado en 1.
Para solucionar el problema.
Obtener el padre (ctrl tab) del padre (CExp_Inv) del padre (CInv_CMDatosCurr) del dialogo que esta contenido en el control tab. algo asi como:
- Código: Seleccionar todo
BOOL CCongreso::OnInitDialog()
{
// SetWindowPos(&CWnd::wndTopMost, 0, 0, 800, 600, SWP_SHOWWINDOW|SWP_NOMOVE); //Se establece el tamaño de ventana
CenterWindow(); //se centra la ventana
CWnd* wnd = GetParent()->GetParent()->GetParent();
m_pPrincipal = (CInv_CMDatosCurr* )wnd;
return TRUE;
}
Y problema solucionado.
Conclusion.
He notado que tu proyecto es basado en dialogos, pero es un dialogo tras otro dialogo, tras otro y tras otros mas... es decir una mezcolanza. Supongo que por eso que es muy dificil pasar parametros de un dialogo a otro por que hay varios dialogos en medio.
Te recomiendo (y es en serio) que cambies la manera de trabajar, por que las proximas veces tendras problemas mas dificiles de encontrar. No uses dialogos como menús... usa el tipo de proyecto SDI (simple document interface) y desde el menú accedes a cada dialogo.
Tambien he notado que colocas el dialogo como "siempre visible":
SetWindowPos(&CWnd::wndTopMost, 0, 0, 800, 600, SWP_SHOWWINDOW|SWP_NOMOVE);
Basta con invocarlos con DoModal para que no puedan acceder al dialogo anterior.....
... en fin..... fue un dolor de cabeza encontrar el problema pero ya esta solucionado.
Saludos.