SoloCodigo
Programación General => C/C++ => Visual C++ => Mensaje iniciado por: Diodo en Sábado 31 de Julio de 2004, 18:12
-
Hola :hola:
Estoy haciendo una aplicacion SDI en la que necesito que se abran 2 dialogos al pulsar sobre las opcciones del menu superior
Creo los dialogos como no modales haciendo
//dialogo 1
//Esto en CMainFrame en OnCreate
CDialogo1 *d1;
d1=new CDialogo1();
// y en el constructor del dialogo pongo:
Create(IDD_DIALOGO1);
Con el segundo dialogo hago lo mismo, y creo 2 variables de los dialogos para acceder a ellos desde los menus de CMainFrame y asi inicianizarlos
CDialogo1 uno;
CDialogo2 dos;
// los muestro en pantalla con
uno.ShowWindow(SW_SHOW);
dos.ShowWindow(SW_SHOW);
me compila todo perfectamente pero al ejecutar el programa me da un error, primero me sale una advertencia de error y luego otra con una señal de stop y el siguiente texto
La instruccion 0x77f41d24 hace referencia a la memoria 0x028e28ae La memoria no se puede "written"
:blink: la verdad es q es bastante frustrante
si podeis echarme una mano muchas gracias
-
Tu error esta en que:
CDialogo1 uno;
CDialogo2 dos;
/*
antes de llamar a la funcion ShowWindow tienes que inicializar las variables
uno y dos. de esta manera:
*/
uno.Create(IDD_DIALOG1);
dos.Create(IDD_DIALOG2);
// luego puedes escribir este codigo sin problemas.
uno.ShowWindow(SW_SHOW);
dos.ShowWindow(SW_SHOW);
Pero aqui se presenta otro problema las variables uno y dos solo son del ambito de la funcion donde han sido creadas asi es que las ventanas posiblemente desaparezcan despues de mostrarse.
Lo que puedes hacer es llamar a tu variable *d1 que ya esta inicializada (creo) entu mainframe.
es decir:
void CMainFrame::FuncionQueLlamaAUnodeLosDialogos()
{
if(d1 != NULL && IsWindow(d1->m_hWnd)) // asegurandonos que este bien
{
d1->ShowWindow(SW_SHOW);
}
}
no olvidarse de liberar el dialogo antes de terminar tu aplicacion
if(d1 != NULL))
{
d1->DestroyWindow();
d1->AlgunaOtraFuncionParaliberarlo();
delete d1;
}