• Sábado 14 de Diciembre de 2024, 23:27

Autor Tema:  Problemas Con Dialogos  (Leído 1360 veces)

Diodo

  • Moderador
  • ******
  • Mensajes: 658
    • Ver Perfil
    • http://www.solocodigo.com
Problemas Con Dialogos
« en: Sábado 31 de Julio de 2004, 18:12 »
0
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

navisoft

  • Miembro activo
  • **
  • Mensajes: 84
    • Ver Perfil
    • http://www.latindevelopers.com
Re: Problemas Con Dialogos
« Respuesta #1 en: Sábado 14 de Agosto de 2004, 01:05 »
0
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;
}