Introducción delegados vc++

Páginas: 5 (1219 palabras) Publicado: 2 de diciembre de 2011
Introducción

http://rfog.cmact.com/dependencias_circulaes_cpp_cli.htm

Pre-Introducción Tras la escritura de este documento, Rodrigo Corral me informó de que las declaraciones adelantadas sí que funcionan con Forms en C++/CLI, pero que el tema es algo complicadillo y hay que hacerlo con truco, por lo que ha escrito una entrada sobre ello en su blog. Introducción Este documento surge comoconsecuencia de una duda planteada en el grupo de noticias del Visual C++ de Microsoft, y pretende ser una guía rápida para solventar el tema de las dependencias circulares que se presentan en el mundo C++/CLI al no estar permitidas las variables globales. Otros lenguajes CLI lo solucionan permitiendo dicho tipo de dependencias, pero el C++/CLI, dadas sus características únicas, no debe permitirlas,y de hecho no lo hace. El problema Imaginemos una situación como la siguiente: tenemos una ventana padre y otra hija, no en el sentido de la herencia del C++, sino en el de que la ventana padre posee a la hija, y la controla. La ventana padre ha de conocer la definición de la hija, por lo que se debe incluir el fichero cabecera correspondiente. Pero podemos necesitar que, al igual que la ventanapadre controle a la hija, ésta también deba manejar a su propietario. Para ello, también debemos incluir la definición de la clase padre en la hija, con lo que generamos la dependencia circular. El motivo de esta necesidad circular se puede observar claramente si estuviéramos construyendo un editor de textos. La ventana principal del editor ha de abrir otra ventana, que quedará no modal y en la queel usuario tecleará el texto a buscar. Cuando seleccione “buscar” en la ventana hija, ésta ha de comunicarle a la principal que realice las tareas pertinentes, por lo que debe conocerla. Y es aquí donde se produce la dependencia circular. La solución clásica La solución clásica es muy sencilla, a la hija se le pasa el handle de ventana padre (o este handle es global), y cuando la primera necesitacomunicarle algo, le envía un mensaje a través de PostMessage o SendMessage. Dicho mensaje deberá estar en el rango de WM_USER, y la ventana padre deberá poder capturarlo e interpretarlo. Puesto con código fuente, la solución quedaría más o menos como sigue:
//En “stdafx.h” o en otro lugar común a ambas ventanas. #define WM_USER_SEARCH WM_USER+1 //En la ventana padre, dentro del bucle demensajes: … case WM_USER_SEARCH: //Código de búsqueda break; //En la ventana hija, en el mensaje WM_COMMAND, procesando //el clic de “buscar”

1 de 3

08-10-2011 19:16

Introducción

http://rfog.cmact.com/dependencias_circulaes_cpp_cli.htm PostMessage( hwnd_ventanaPadre, WM_USER_SEARCH, (WPARAM)m_tipoBusqueda, (LPARAM)m_pCadenaBuscar);

La solución MFC es muy similar a esta. Así, aparte dehacer ambas ventanas completamente independientes una de otra, evitamos que la ventana hija tenga que conocer toda la ventana padre, haciendo que toda la comunicación entre ellas se lleve a cabo mediante una variable del tipo Handle de Ventana. La solución CLI En el mundo .NET el sistema de paso de mensajes desparece de la vista del programador y queda subsumido dentro del marco de aplicación,liberando así de cierta complejidad, pero a su vez generando otra nueva. La solución CLI pasa por el uso de delegados, o mejor todavía, de eventos, aunque aquí sólo vamos a explicar la primera de las dos formas, siendo la segunda trivial de implementar conociendo la anterior. Como ejemplo vamos a tener dos ventanas, al hacer clic en la principal se nos abrirá la hija, y al hacer clic sobre esta,aparecerá en la padre un mensaje. El primer paso consiste en definir el delegado de forma global y que sea visible para ambas ventanas. En nuestro caso será un método al que se le pasará una cadena, que será mostrada en un componente de etiqueta. La firma del método será, pues:
delegate void MuestraMensaje(String ^msg)

Esta línea se colocará en el fichero cabecera de la ventana hija; como este...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Introduccion a delegado
  • VC
  • Delegar
  • soy delegada
  • delegar
  • Delegar
  • delegar
  • Delegar

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS