Win32 API Tutorial
Comenzando con la API de Win32
Buscar..
Observaciones
WinAPI (también conocida como Win32; oficialmente llamada API de Microsoft Windows) es una interfaz de programación de aplicaciones escrita en C por Microsoft para permitir el acceso a las funciones de Windows. Los componentes principales de WinAPI son:
- WinBase: las funciones del kernel, CreateFile, CreateProcess, etc.
- WinUser: las funciones GUI, CreateWindow, RegisterClass, etc.
- WinGDI: las funciones gráficas, Ellipse, SelectObject, etc.
- Controles comunes: controles estándar, vistas de lista, controles deslizantes, etc.
Ver también:
- Índice API de Windows en MSDN.
Versiones
Las versiones de la API están vinculadas a la versión del sistema operativo. La documentación de MSDN especifica el sistema operativo mínimo soportado para cada función en la API.
Hola Mundo
Las aplicaciones de Microsoft Windows generalmente se escriben como una aplicación de consola o una aplicación de ventana (existen otros tipos, como servicios y complementos). La diferencia para el programador es la diferencia en la interfaz para el punto de entrada principal para la fuente de la aplicación proporcionada por el programador.
Cuando se inicia una aplicación C o C ++, el punto de entrada ejecutable utilizado por el cargador ejecutable es el Runtime que proporciona el compilador. El cargador ejecutable lee en el ejecutable, realiza cualquier corrección a la imagen necesaria y luego invoca el punto de entrada ejecutable que para un programa C o C ++ es el tiempo de ejecución proporcionado por el compilador.
El punto de entrada ejecutable invocado por el cargador no es el punto de entrada principal proporcionado por el programador de la aplicación, sino que es el tiempo de ejecución proporcionado por el compilador y el enlazador que crea el ejecutable. El Runtime configura el entorno para la aplicación y luego llama al punto de entrada principal provisto por el programador.
Una aplicación de consola de Windows puede tener varias interfaces ligeramente diferentes para el punto de entrada principal proporcionado por el programador. La diferencia entre estos es si el punto de entrada principal es el int main (int argc, char *argv[])
tradicional int main (int argc, char *argv[])
o si es la versión específica de Windows de int _tmain(int argc, _TCHAR* argv[])
que proporciona una amplia Caracteres en los parámetros de la aplicación. Si genera un proyecto de aplicación de consola Windows Win32 utilizando Visual Studio, la fuente generada será la versión específica de Windows.
Una aplicación de Windows (GUI) tiene una interfaz diferente para el punto de entrada principal provisto por el programador. Este punto de entrada principal proporcionado por el programador tiene una interfaz más compleja porque el Runtime configura un entorno de GUI y proporciona información adicional junto con los parámetros de la aplicación.
Este ejemplo explica la interfaz del punto de entrada principal de la ventana de Windows (GUI). Para explorar estos temas debes tener:
- un IDE con compilador (preferiblemente Visual Studio)
- Conocimiento c
Cree un proyecto de Windows Win32 vacío (GUI, no consola) usando el IDE. La configuración del proyecto debe establecerse para una aplicación de ventana (no una aplicación de consola) para que el vinculador se vincule con el tiempo de ejecución correcto. Cree un archivo main.c
agregándolo al proyecto y luego escriba el siguiente código:
#include <windows.h>
int APIENTRY WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow)
{
return MessageBox(NULL, "hello, world", "caption", 0);
}
Este es nuestro programa Win32 "Hola, mundo". El primer paso es incluir los archivos de encabezado de Windows. El encabezado principal para todo Windows es windows.h
, pero hay otros.
El WinMain
es diferente de un int main()
estándar usado con una aplicación de consola. Hay más parámetros utilizados en la interfaz y, lo que es más importante, el punto de entrada principal para una aplicación de ventana utiliza una convención de llamada diferente de la estándar C / C ++.
El calificador APIENTRY
indica la convención de llamada, que es el orden en el que los argumentos se insertan en la pila † . De forma predeterminada, la convención de llamada es la convención estándar de C indicada por __cdecl
. Sin embargo, Microsoft utiliza un tipo diferente de convención de llamada, la convención PASCAL, para las funciones de la API de Windows que se indica con el calificador __stdcall
. APIENTRY
es un nombre definido para __stdcall
en uno de los archivos de encabezado incluidos por windows.h
(vea también ¿Qué es __stdcall? ).
Los siguientes argumentos para WinMain
son los siguientes:
- hInst: el manejador de instancia
- hInstPrev: el identificador de instancia anterior. Ya no se utiliza.
- cmdline: argumentos de la línea de comandos (vea Pasar los argumentos de WinMain (o wWinMain) a la principal normal )
- cmdshow: indica si se debe mostrar una ventana.
Aún no usamos ninguno de estos argumentos.
Dentro de WinMain()
, hay una llamada a MessageBox()
, que muestra un diálogo simple con un mensaje, un cuadro de mensaje. El primer argumento es el manejador de la ventana del propietario. Como todavía no tenemos nuestra propia ventana, pase NULL
. El segundo argumento es el texto del cuerpo. El tercer argumento es el título, y el cuarto argumento contiene las banderas. Cuando se pasa 0, se muestra un cuadro de mensaje predeterminado. El siguiente diagrama disecciona el cuadro de diálogo del cuadro de mensaje.
Buenos enlaces:
† Solo en sistemas de 32 bits. Otras arquitecturas tienen diferentes convenciones de convocatoria.