Consejos útiles

Cómo crear una ventana (aplicación)

Pin
Send
Share
Send
Send


  • - compilador
  • - Windows Platform SDK.

Registre la clase de ventana que se creará, si es necesario. Llame a las funciones API RegisterClass, RegisterClassEx o use la funcionalidad correspondiente del marco aplicado.

Las funciones RegisterClass y RegisterClassEx llevan punteros a estructuras de tipo WNDCLASS y WNDCLASSEX, respectivamente, como un solo parámetro. Se puede usar un valor de retorno de tipo ATOM en lugar del nombre de la clase al crear una ventana. Si la llamada a la función falla, se devolverá el valor 0.

Cree una instancia de una estructura de tipo WNDCLASS o WNDCLASSEX. Rellene todos los campos obligatorios. En particular, los valores correctos deben colocarse en:

- cbSize - tamaño de la estructura en bytes,
- estilo: un conjunto de estilos de clase de ventana,
- lpfnWndProc - puntero al procedimiento de la ventana,
- hInstance maneja al módulo en el que está registrada la clase de ventana,
- lpszClassName es el nombre simbólico de la clase.

Los campos restantes pueden contener valores nulos. Llame a la función para registrar la clase de ventana. Verifique el resultado devuelto.

Crea una ventana de Windows. Utilice las funciones de la API CreateWindow, CreateWindowEx o los métodos de contenedor correspondientes de los objetos de clase del marco o biblioteca utilizados. El prototipo de la función CreateWindowEx es el siguiente:

HWND CreateWindowEx (
DWORD dwExStyle,
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HINSTANCE hInstance,
LPVOID lpParam
),

La función CreateWindow difiere de CreateWindowEx solo en ausencia del parámetro dwExStyle.

Realice una llamada a CreateWindow o CreateWindowEx. Pase el nombre o valor del tipo ATOM de la clase de ventana definida en el primer o segundo paso como el parámetro lpClassName. Los parámetros x, y, nWidth, nHeight pueden ser las coordenadas y dimensiones de la ventana creada. El identificador de la ventana principal (si existe) se pasa a través de hWndParent.

Guarde y analice el valor devuelto por las funciones CreateWindow o CreateWindowEx. Si tiene éxito, devolverán el identificador a la nueva ventana; si falla, devolverán NULL.

Conocimiento necesario:

Al crear este programa, consideraremos los principios básicos de la creación de aplicaciones de ventana en C #, así como los métodos para lograr cualquier objetivo final con ellos: en nuestro caso, esta es una ventana divertida.

Cree un nuevo proyecto, instale la aplicación como el tipo de plantilla Formularios de Windowscomo se muestra en la figura 1:
Figura 1. Crear un nuevo proyecto.
Nombra el proyecto Randwindow y presione el botón Ok.

Ventana de trabajo MS Visual Studio contiene las siguientes ventanas auxiliares.
Figura 2. Ventanas auxiliares.
En la figura, los números marcados:

  1. La ventana Caja de herramientas (Panel de control): puede colocar los controles en el formulario creado.
  2. La ventana Explorador de soluciones (Explorador de soluciones): aquí puede ver los siguientes nodos: Propiedades - configuración del proyecto, Enlaces (Enlaces): bibliotecas conectadas al proyecto, así como archivos fuente creados y conectados al proyecto (con la extensión .cs) y formularios relacionados con el proyecto (por ejemplo, Form1).
  3. La ventana Vista de clase (Ventana de clase): aquí están todas las clases creadas en el programa.
  4. La ventana Propiedades (Propiedades): al seleccionar cualquier control o incluso un formulario, puede ver todos los parámetros de este objeto, así como cambiar los valores predeterminados en ellos.

Crear aplicaciones de ventana se reduce a crear todos los cuadros de diálogo necesarios, así como a colocar los elementos necesarios en ellos. En el futuro, configuramos el procesamiento de eventos creados por el usuario y configuramos los aspectos técnicos del programa. En nuestro caso, primero colocaremos todos los controles necesarios en el formulario principal, después de lo cual agregaremos un controlador de eventos de movimiento del mouse y un procesamiento de clic de botón.

Agregar nuevos controles al formulario

Entonces, después de ingresar el nombre del proyecto, instaló la plantilla necesaria y hizo clic Ok, MS Visual Studio Creará automáticamente un marco de aplicación de ventana, después de lo cual podremos agregarle nuevos elementos de ventana.

Para hacer esto, arrastre el elemento de ventana requerido desde la ventana de herramientas (Caja de herramientas).

Nuestra ventana necesitará 2 elemento del campo de entrada, en el que mostraremos las coordenadas del puntero del mouse, lo que facilitará nuestra comprensión del programa.

En el centro de la ventana habrá una inscripción que crearemos usando el elemento Etiqueta.
A continuación se ubicará 2 botones

Estire la ventana en blanco un poco. Si hace clic derecho sobre él, se abrirá un menú contextual. En él, haga clic en el elemento de propiedad, después de lo cual puede estudiar los diversos parámetros de la ventana que puede cambiar. La Figura 3 muestra las propiedades más (usualmente) necesarias:
Figura 3. Varias propiedades de ventana (formulario) en C # .NET.
Estire un poco la ventana en blanco y agregue todos los elementos necesarios. En la figura 4 puedes verlos en la ventana Caja de herramientas:
Figura 4. Arrastre y suelte los elementos necesarios de la Caja de herramientas en el formulario creado.

Ir a propiedades de cadena Etiqueta1donde cambiar el texto a "¿Te esfuerzas por hacer del mundo un lugar mejor?". También cambie el tipo de fuente, para esto encuentre la propiedad Font .
Figura 5. Propiedad de fuente del elemento Label.
Luego establezca el tipo de fuente Tahomaancho de fuente Negrita y el tamaño es igual 16 .
Figura 6. Configuración de fuente.
Luego, cambie el texto en los botones usando la propiedad Texto.

El espacio en blanco resultante de la ventana del programa tendrá el siguiente aspecto.
Figura 7. El formulario tendrá el siguiente aspecto.

La parte técnica del programa.

  1. Primero, agregaremos un controlador de eventos de mouse e implementaremos la salida de sus coordenadas x y y en dos campos de entrada creados.
  2. A continuación, crearemos los manejadores de funciones para hacer clic en cada una de las teclas del mouse (especialmente los usuarios que trabajan duro aún pueden acceder a "Si por supuesto!»).
  3. A continuación, agregaremos un código que implementa el movimiento aleatorio de la ventana en caso de que el cursor se acerque a "Si por supuesto!».

Determinar el movimiento del puntero del mouse sobre una forma

Haga clic directamente en el formulario que forma parte de la aplicación (No en uno de los elementos).

Ahora ve a las propiedades del formulario con un clic derecho -> menú contextual propiedades.

Ahora debe ir a la lista de posibles eventos que puede recibir esta ventana. Para hacer esto, haga clic en "Suceso"(Eventos), como se muestra en la Figura 8:
Figura 8. Vaya a la lista de posibles eventos.
Cuando el usuario mueve el mouse sobre nuestra ventana, el sistema operativo envía un mensaje al programa con las coordenadas actuales del puntero. Los necesitamos

Para asignar un controlador para este evento, busque la línea Mousemove , luego haga doble clic en el campo a la derecha: el controlador de eventos del mouse se agregará automáticamente y se agregará la función Form1_MouseMove en el código de nuestro programa.
Figura 9. Después de hacer doble clic a la derecha de MouseMove, aparecerá esta línea y se realizará automáticamente la transición al código de la función de controlador de este evento.
Agregue 2 líneas a esta función para que su código se vea así.


Esta función que procesa el evento de mover el puntero del mouse sobre el formulario recibe 2 parámetro: objeto emisor e instancia de clase MouseEventsArgsque contiene información sobre las coordenadas del puntero del mouse y otras propiedades actuales.

textBox1 y textBox2 Estas son instancias de clase cuadro de textoque gestionan nuestros elementos de campo de entrada.

Miembro de datos de instancia Texto le permite establecer texto en estos campos.

Por lo tanto, si ahora compila el programa (F5), al mover el puntero del mouse sobre la forma de la ventana, veremos las coordenadas del puntero (dentro del formulario), que cambiarán continuamente.

Ahora volvamos al espacio en blanco de nuestro formulario. Para hacer esto, haga clic en la pestaña correspondiente (Form1.cs [Constructor])como se muestra en la figura 10:
Figura 10. Transición al diseñador de formularios C #.
Haga doble clic en el primer botón: Estudio visual agregará automáticamente el código de procesamiento de este botón cuando se presione.

Agregue las siguientes líneas de código:


Ahora regrese al diseñador y agregue un segundo botón, también haciendo doble clic en él.

Contendrá el siguiente código:


Como puede ver, aquí tenemos un poco complicado el código para invocar el cuadro de mensaje para demostrar cómo funciona con más detalle. Todos los parámetros pasados ​​a la función Mostrar comentado en el código fuente.

Ahora solo tenemos que darnos cuenta del movimiento de la ventana en el momento en que el mouse se acerca al botón "Si por supuesto».

Para hacer esto, agregamos el código a la función:

vacío privadoForm1_MouseMove (remitente del objeto, MouseEventArgs)

El principio es muy simple: al obtener las coordenadas del movimiento del mouse, verificamos si están incluidas en el cuadrado que describe nuestro botón con un pequeño margen. Si es así, entonces generamos 2 números aleatorios que se usarán para mover la ventana.

Simplemente podríamos seguir el mensaje sobre pasar el mouse sobre el botón, pero viene con un retraso notable y, por lo tanto, el usuario hace clic en el botón Sí sin ninguna dificultad, por lo que simplemente calcularemos el cursor que llega al área alrededor del botón.

También tendremos que declarar algunos "trabajadores"variables que seguiremos usando.

Condición de la tarea

1. Desarrolle un cuadro de diálogo que contenga dos botones, Aceptar y Cancelar.

Fig. 1. El formulario a crear

2. Llame al cuadro de diálogo desde la ventana principal de la aplicación. Muestre el mensaje correspondiente si se presiona una de las dos teclas en el cuadro de diálogo: Aceptar y Cancelar.

2. Cree un proyecto C ++ utilizando la plantilla de aplicación basada en cuadros de diálogo

Se describe un ejemplo detallado de creación de un proyecto utilizando la plantilla de aplicación basada en cuadros de diálogo aqui .

En la ventana para crear un nuevo proyecto, configure el nombre de la aplicación como MFCApp. En el futuro nos apegaremos a este nombre.

Carpeta de aplicación en nuestro caso (no importante):

Al crear un nuevo proyecto en el asistente, seleccione Aplicación basada en cuadros de diálogo. Todas las demás configuraciones se dejan por defecto.

Como resultado, se generarán dos clases con los nombres CMFCAppApp y CMFCAppDlg.

La ventana de MS Visual Studio después de las acciones completadas se verá como se muestra en la Figura 2.

Fig. 2. Formulario de solicitud después de crear una aplicación basada en cuadros de diálogo

3. Cambiar la apariencia del formulario principal

Borremos el botón Aceptar. Y cambie el nombre del botón Cancelar para salir.

Para eliminar el botón Aceptar, primero debe seleccionarlo y luego presionar la tecla Eliminar.

Por lo tanto, eliminamos el elemento en el que está escrito:

Para cambiar el nombre del botón Cancelar, primero selecciónelo y luego, en la ventana Propiedades, en la propiedad Título, escriba la palabra "Salir". Por lo tanto, la aplicación ya está configurada para hacer clic en el botón "Salir" de tal manera que la aplicación salga.

Fig. 3. Cambie el nombre del botón de "Cancelar" a "Salir"

Hasta ahora, en la ventana del panel Propiedades, tenemos dos elementos:

  • IDD_MFCAPP_DIALOG: la ventana principal de la aplicación,
  • IDCANCEL - botón "Salir" (anteriormente "Cancelar").

Puede descargar la aplicación para su ejecución y probar su funcionamiento.

Ponemos otro botón en el formulario que no está vinculado a los controladores de eventos. Otro elemento IDC_BUTTON1 aparece en la ventana del panel Propiedades.

El formulario de solicitud será como se muestra en la Figura 4.

Fig. 4. Eliminar un botón que no está vinculado a un controlador de eventos

La propiedad Caption del botón IDC_BUTTON1 se cambia a Form2. Después de hacer clic en este botón, se abrirá un cuadro de diálogo.

5. Formación de una clase y recursos de un cuadro de diálogo.

En MS Visual Studio, los recursos del cuadro de diálogo se crean automáticamente después de crear una clase de ventana. Por lo tanto, al crear una clase de ventana, creamos automáticamente un recurso de ventana.

Para trabajar con clases, se utiliza el Asistente de clase. Para llamar al Asistente de clase, haga clic con el botón derecho y seleccione el comando "Asistente de clase ..." en el menú contextual (Fig. 5).

Fig. 5. Llame al "Asistente de clase ..." para crear un cuadro de diálogo de clase y recurso

Como resultado, se abrirá una ventana, que se muestra en la Figura 6.

Fig. 6. Ventana "Asistente de clase MFC"

La ventana tiene los siguientes campos:

1. Campo "Proyecto:" - proyectos existentes en la solución (Solución).

2. El campo "Nombre de clase:" indica las clases disponibles en el proyecto. En nuestro caso, hay tres clases con nombres:

  • CMFCAppApp - clase de aplicación en su conjunto,
  • CMFCAppDlg - clase de cuadro de diálogo de aplicación,
  • CAboutDlg es la clase del cuadro de diálogo Acerca de que se generó cuando el AppWizard creó el proyecto.

3. El campo "Clase base:" indica la clase base de la cual se hereda la clase que se muestra en el campo "Nombre de clase:".

4. El campo "Recurso:" define el nombre del recurso que corresponde a la clase desde el campo "Nombre de clase:".

5. El campo "Declaración de clase:" define el nombre del archivo de encabezado para la clase, que se muestra en el campo "Nombre de clase:".

6. El campo "Implementación de clase:" define el nombre del archivo en el que se implementan las funciones de la clase, que se muestra en el campo "Nombre de clase:".

La ventana también tiene cinco pestañas, que para una clase del campo "Nombre de clase:" describen:

  • comandos de la tarjeta de mensaje,
  • Los mensajes de Windows que se generan en la clase y se pueden procesar,
  • funciones virtuales
  • variables internas descritas en la clase,
  • Métodos disponibles en el aula.

Para agregar una nueva clase, llamamos al comando Agregar clase.

Fig. 7. El comando para agregar una nueva clase

Como resultado, se abre la ventana "Asistente para agregar clase MFC", en la que establecemos los campos en valores, como se muestra en la Figura 8. Para configurar los campos, simplemente escriba "CForm2" en el campo "Nombre de clase:". Todos los demás campos se completarán automáticamente con la excepción del campo "Clase base:".

En el campo "Base> CDialog.

El nombre del recurso se establece como IDD_FORM2.

El archivo de encabezado y el archivo de implementación de clase se denominan "Form2.h" y "Form2.cpp".

Fig. 8. Crear una nueva clase CForm2 y recurso IDD_FORM2, que se basan en la clase CDialog

Haga clic en "Finalizar". En la ventana anterior, puede ver que la clase CForm2 se ha agregado a las tres clases anteriores.

Nuevamente haga clic en "Aceptar".

6. Ventana de MS Visual Studio y panel del Explorador de soluciones

Después de las acciones realizadas, la ventana del panel Explorador de soluciones se ve como se muestra en la Figura 9.

Fig. 9. Ventana del Explorador de soluciones

Como se puede ver en la Figura 9, los archivos "Form2.h" y "Form2.cpp" aparecieron en la lista de archivos de encabezado. En consecuencia, estos son los archivos de encabezado e implementación para la clase CForm2 recién formada.

7. Llamar al cuadro de diálogo de la clase CForm2 como recurso

Para comenzar a formar un nuevo cuadro de diálogo (clase CForm2), debe llamarlo como un recurso. Para hacer esto, en el Explorador de soluciones, haga doble clic en el archivo "MFCApp.rc" en la pestaña Recursos.

Fig. 10. Llamar a la lista de nombres de recursos de la aplicación

Obtenemos una lista de nombres de recursos disponibles:

  • IDD_ABOUTBOX: recurso del cuadro de diálogo Acerca de,
  • IDD_FORM2: recurso de la ventana recién creada,
  • IDD_MFC_APP_DIALOG: el recurso de la ventana principal de la aplicación.

Para llamar al recurso deseado, debe hacer doble clic en él. Haga doble clic en el recurso IDD_FORM2. Como resultado, se abre un cuadro de diálogo recién creado. Como se puede ver en la Figura 11, es similar a la ventana de la aplicación inicial del tipo de Aplicación basada en cuadros de diálogo.

Fig. 11. Ventana de la clase CForm2, que se hereda de la clase CDialog

Puede cambiar el tamaño del formulario y la ubicación de los botones "Aceptar" y "Cancelar".

8. Programación del evento de clic en el botón "Form2" de la ventana principal de la aplicación

Usando el "Explorador de soluciones" y el archivo de recursos "MFCApp.rc" (ver p. 7), vamos al recurso IDD_MFCAPP_DIALOG de la ventana principal de la aplicación.

Fig. 12. La ventana principal de la aplicación

En la ventana "Propiedades", seleccione el botón con el identificador IDC_BUTTON1. Luego vaya a la inserción "Eventos de control".

Fig. 13. Lista de eventos de la pestaña Eventos de control del control IDC_BUTTON1

En la lista de eventos encontramos un evento con el nombre BN_CLICKED. Luego seleccione el botón para seleccionar el menú de arriba hacia abajo y seleccione "OnBnClickedButton1" en el menú.

Fig. 14. Seleccionar el evento BN_CLICKED y llamar al controlador de eventos OnBnClickedButton1

Como resultado, la ventana del archivo "MFCAppDlg.cpp" se abre con el fragmento de código seleccionado del controlador de eventos OnBnClickedButton1.

Entre los corchetes <> debe insertar su propio código de manejo de eventos.

El código del programa de la función para procesar el evento click en el botón IDC_BUTTON1 es el siguiente:

Ahora puede ejecutar la aplicación para su ejecución y probar su funcionamiento.

Pin
Send
Share
Send
Send