0% encontró este documento útil (0 votos)
5 vistas5 páginas

Progrmacion en C

Cargado por

nmenesesg
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas5 páginas

Progrmacion en C

Cargado por

nmenesesg
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 5

Creación de interfaces graficas utilizando C Windows API

Programación en C

Punto de entrada en C (La función main)=es el punto de entrada donde comienza la ejecución del
programa y desde donde se llama a otras funciones según sea necesario. Pero realmente no es el
primer programa que se corre, la ejecución del programa comienza realmente con una función
llamada mainCRTStartup

Las ventanas en Windows API

Todo es una ventana en Windows. En las ventanas se puede mostrar información o lograr que el
usuario introdusca información.

Cada aplicación UI de Windows tiene que tener por lo menos 2 funciones WinMain Function y
window procedure

WinMain function

La función WinMain es el punto de entrada para una aplicación de interfaz de usuario. Inicia la
apliación, muestra la ventana de aplicación en el programa y entra al loop principal

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,


PWSTR pCmdLine, int nCmdShow);

WINAPI

MACRO: secuencia de instrucciones que se asigna un nombre y se puede usar


como una abreviatura para escribir código. Cuando se compila el programa,
el compilador reemplaza todas las instancias de la macro con la secuencia
de instrucciones que representa. Cuando se utiliza WINAPI antes del
nombre de una función, el compilador reemplaza WINAPI con __stdcall, lo
que indica al compilador y al sistema operativo que la función debe
seguir la convención de llamada stdcall. Esta convención especifica como
los argumentos se pasan a la función y como se limpia la pila después de
que la función ha terminado de ejecutarse.

Instancia: Una instancia, en el contexto de aplicaciones de Windows, se


refiere a un identificador único asignado por el sistema operativo a cada
ejecución de la operación. Se utiliza para cargar recursos específicos de
la aplicación, asociar ventana con la aplicación correcta y en general
para identificar y administrar los recursos y la ejecución de la
aplicación en el sistema operativo. Cada vez que se ejecuta una
aplicación, se crea una instancia diferente de esa aplicación. Cada
instancia de la aplicación tiene su propio espacio de memoria y recursos
asociados. Cuando se ejecuta un programa en Windows, el sistema operativo
crea una instancia única de este programa en la memoria y asigna un
‘Hisntance’ especifico para esa instancia. Cuando se crea una centana en
Windows, se asocia con el ‘HINSTANCE’ de la aplicación

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,


LPSTR pCmdLine, int nCmdShow);

¿Qué es HINSTANCE hInstance? Es un parámetro que le pasamos a la


aplicación WinMain y representa la instancia de la aplicación en
ejecucuión

HINSTANCE: Es un tipo de dato que se utiliza en Windows para representar


una instancia de una aplicación

hInstance: Es el nombre que se le da al parámetro. Es analago a cuando


definimos una función en C que recibe un parámetro

void función(int valor)

Ponemos que tipo de variable es el parámetro y le damos un nombre. Y ese


mismo nombre lo utilizamos dentro de la función. En este caso con el
parámetro de tipo HINSTANCE cuyo nombre es hInstance es utilizado dentro
de la función para acceder a recursos de la aplicación como iconos,
cursores, ventanas, etc que están asociados con esa instancia especifica
de la aplicación. Cabe aclarar que el nombre que se le da al parámetro
puede ser el que queramos, podemos llamar a esta variable ‘Perro’ o
‘pajaro’, pero por conveniencia y por facilidad a la hora de leer el
código se le da el nombre de hInstance.

HINSTANCE hPrevInstance: Esto era utilizado en versiones antiguas de


Windowa, ahora se establece en Null

Los siguientes parámetros que recibe la funcuín WinMain son punteros a


una variable. Así que recordemos que son los punteros.

En C, se obtiene la dirección de memoria de cualquier variable mediante


el operador & seguido del nombre de la variable. Así pues, un puntero, es
una variable que guarda la dirección de memoria de otra variable. Esto
hace que los punteros sean uno de los aspectos mas potentes de C, ya que
nos da acceso a la memoria. Estamos tocando la memoria.
LPSTR Es un tipo de dato, la función WinMain recibe como uno de sus
parámetros, una variable que es de este tipo de dato. Este en especifico
es un puntero a una cadena de caracteres CHAR. Por lo tanto, esta
variable guarda la dirección de memoria de donde esta almacenado la
cadena de caracteres

int nCmdShow Indica como se debe mostar la ventana

A crear la ventana

Antes de crear la ventana, debemos registrar su clase dentro de Windows.


Muchos controles, como botones o texto estático, ya tienen creada su
clases, así que cuando creamos un botón o un texto estático, no hay
necesidad de especificar su clase. Para registrar la clase de la ventana,
debemos crear y llevar una estructura WNDCLASS

WNDCLASS La inicialización de la estructura WNDCLASS con {0} se hace


para asegurarse de que todos los miembros de la estructura se inicialicen a
cero o a valores nulos. En C y C++, cuando se inicializa una estructura con
{0}, todos los miembros de la estructura se establecen en cero. Esto es útil
porque garantiza que no haya basura en la estructura y que todos los
miembros estén en un estado conocido antes de asignar valores específicos a
cada miembro.

wc.lpfnWndProc = WndProc; : Esta línea establece el puntero a la función de


procedimiento de ventana ( WndProc) que se utilizará para manejar los
mensajes de la ventana. WndProc es la función que has definido para manejar
los mensajes de la ventana, como el mensaje WM_DESTROY que se utiliza
para cerrar la ventana.

Sí, HWND es un tipo de datos en la programación de Windows


que representa un identificador de ventana. En términos
simples, es una forma de referirse a una ventana específica en
un programa de Windows. HWND se utiliza para realizar
operaciones en una ventana, como mostrarla, ocultarla, moverla
o cambiar su tamaño. Es un tipo de datos que se utiliza
comúnmente en la API de Windows para trabajar con ventanas.

Esta parte del código es un bucle que se utiliza para recibir y manejar
mensajes enviados a la ventana. Aquí está la explicación de cada parte:
 TranslateMessage(&msg) : Esta función se utiliza para traducir
mensajes de teclado en mensajes de caracteres virtuales. Esto es
necesario para que la aplicación pueda recibir y procesar
correctamente las pulsaciones de teclas.
 DispatchMessage(&msg) : Esta función se utiliza para enviar el
mensaje recibido al procedimiento de ventana ( WndProc) asociado
con la ventana. El procedimiento de ventana es responsable de
manejar el mensaje y realizar las acciones necesarias en
respuesta al mensaje.

Este es un ejemplo básico de un procedimiento de ventana ( WndProc)


en Windows. Aquí hay una explicación línea por línea:

 LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM


wParam, LPARAM lParam) { : Esta es la definición del
procedimiento de ventana. Toma cuatro parámetros: hwnd es el
identificador de la ventana, msg es el mensaje enviado a la
ventana, wParam y lParam son parámetros adicionales para el
mensaje.
 switch(msg) { : Se inicia un bloque switch para manejar diferentes
tipos de mensajes.
 case WM_DESTROY:: Este es un caso que maneja el mensaje
WM_DESTROY, que se envía cuando la ventana está siendo
destruida.
 PostQuitMessage(0); : Cuando se recibe el mensaje WM_DESTROY,
se llama a PostQuitMessage para indicar que la aplicación debe
salir del bucle de mensajes. El argumento 0 indica que la
aplicación saldrá con un código de salida de 0.
 break;: Se utiliza para salir del switch después de manejar el
mensaje WM_DESTROY.
 return DefWindowProcW(hwnd, msg, wParam, lParam); : Si el
mensaje no es WM_DESTROY, se llama a DefWindowProcW para
manejar el mensaje de manera predeterminada. DefWindowProcW
es una función que proporciona un comportamiento
predeterminado para la ventana y se encarga de mensajes que la
aplicación no maneja explícitamente.
 }: Cierra el bloque switch.
 }: Cierra el procedimiento de ventana.

En resumen, este procedimiento de ventana maneja el mensaje


WM_DESTROY para salir de la aplicación cuando la ventana se cierra y
llama a DefWindowProcW para manejar otros mensajes de manera
predeterminada.

También podría gustarte