Blog de Jorge Esteban


Api Windows en C++ (Winapi)
junio 19, 2008, 2:35 am
Filed under: Manuales X mi

Api Windows(Winapi) con Visual C++ 6.0

VC

Esta vez veremos como programar en C++ con la api de windows (Winapi) obviamente para hacer programas con interfaz grafica y todo el pedo en C++…  pues les voy a dejar lo mas sencillo y unos tutos ya con mas cosas para que empiezen a trabajar con la winapi, al principio diras “que demonios? el jez esta loco” por que se utilizan muchas constantes clases y funciones, pero ya que lo domines veras que es muy divertido, ademas de que controlando la winapi, se te hará mucho mas facil utilizar interfaz grafica con GTK o KDE en GNU\Linux utilizando C++ (es mas complejo utilizar winapi que estas 2)… empezemos, daré por hecho que tienes las bases de C++ (que es una funcion, una clase, una constante ¬¬ una variable…) recomiendo utilizar Visual C++ 6.0 ya que este es el compilador por excelencia de aplicaciones C++ con winapi en Windows y no utiliza la tecnologia .net, ir a File>>New, seleccionar “Win32 Application” y poner nombre y ubicación, luego seleccionar “a simple Win32 Application” , nos generara el siguiente codigo:

 #include “stdafx.h”

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
  // TODO: Place code here.

 return 0;
}

La primera linea nos incluye la libreria stdafx.h que es una estandarizacion de la libreria “windows.h” a la cual manda a llamar (windows.h es la principal, stdafx.h solo es para estandarizar) dentro de windows.h esta todo el codigo que necesitamos para crear nuestras ventanas, etc… siguiente linea.

Todos lo mas seguro es que te hallan dicho que en C++ tu programa se ejecutaria desde la funcion main(), y que era la funcion mas importante y x… pues olvidalo, para winapi, se utilizara WinMain con sus 4 parametros, estos son de rigor y no se cambian, pondre explicacion de cada parametro

>HINSTANCE hinstance: Es un handle(apuntador) a la instancia de nuestro programa.
>HINSTANCE hPrevInstance: Ya no se utiliza, se sigue poniendo por compatibilidad pero no es importante.
>LPSTR lpCmdLine: Es un puntero que apunta a una cadenas de caracteres de los parametros enviados al abrir nuestro programa por ejemplo desde ms-dos “miprograma.exe -desinstalar” enviara -desinstalar.
>int CmdShow: Este parametro sirve para indicarle a nuestro programa como se abrira la ventana principal de nuestro programa (maximizado, normal, minimizado) los valores pueden ser: SW_SHOWNORMAL, SW_MAXIMIZE o SW_MINIMIZE

como ven son muchas constantes, pero ya que se explicaron no se ve tan dificil y se ve lógico… bien sigamos
la libreria windows.h dentro tiene una clase llamada WNDCLASSEX la cual nos va a servir para darle las propiedades a nuestra ventana (botones, tamaño, icono, etc) la clase, es la siguiente:

typedef struct _WNDCLASSEX {
 UINT cbSize;    
 UINT style;    
 WNDPROC lpfnWndProc;
 int cbClsExtra;    
 int cbWndExtra;    
 HANDLE hInstance;    
 HICON hIcon;    
 HCURSOR      hCursor;
 HBRUSH hbrBackground;    
 LPCTSTR      lpszMenuName;
 LPCTSTR      lpszClassName;
 HICON hIconSm;    
} WNDCLASSEX;  

no se necesita declarar ni meterla en nuestro codigo (ya viene incluida en windows.h)solo la pongo para que la observen…  basta con que en nuestro programa declaremos una variable del tipo WNDCLASSEX, y vayamos llenando los datos… no llenaré todos solo los mas necesarios, pero en los tutos viene todo explicado con peritas y manzanas…

int winmain(…
WNDCLASSEX WindowsRifa; // Variable del tipo WNDCLASSEX

WindowsRifa.cbSize = sizeof(WNDCLASSEX); // Es el tamaño de WNDCLASSEX en bytes, siempre poner esta asi.
WindowsRifa.style = CS_OWNDC | CS_HREDRAW | CS_VREDRAW; // Estilo de la ventana
etc)
WindowsRifa.hInstance = hinstance; //este es el handle pasado a WinMain()
WindowsRifa.lpszClassName = “miVentana” //aqui le ponemos un nombre a nuestra clase, pongan el nombre de su programa sin espacios
WindowsRifa.lpfnWndProc = Eventos; // Nombre de nuestra Funcion que manejara los eventos (abrir, cerrar, click,
WindowsRifa.cbClsExtra = 0; // pongalo asi siempre es informacion de la clase, no se utiliza
WindowsRifa.cbWndExtra = 0; // igual, pero informacion de la ventana, ponganlo asi siempre
WindowsRifa.hIcon = LoadIcon(NULL, IDI_APPLICATION);//Cargar icono por defecto en windows…
WindowsRifa.hCursor = LoadCursor(NULL, IDC_ARROW); // Cargar Cursor por defecto de windows
WindowsRifa.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); //cargar color por defecto para las ventanas de windows

ya llenamos los datos!!! ahora debemos registrar nuestra clase, esto va con la funcion RegisterClassEx() y de parametro lleva la direccion de nuestra clase RegisterClassEx(&WindowsRifa);

ya terminamos!! solo falta ejecutar nuestra ventana, esto se hace con la funcion CreateWindowEx, la cual recibe otra vez un buen de parametros…
esta es la funcion, no necesita declararse por que ya viene en windows.h solo la pongo para que la observen

HWND CreateWindowEx {
DWORD dwExStyle,        // Estilo extendido de nuestra window
LPCTSTR lpClassName,    // Apuntador a la clase de la clase que registramos
LPCTSTR lpWindowName,   // Puntero al nombre de nuestra ventana
DWORD dwStyle,          // Estilo de ventana
int x,                  // Posicion en el eje x de nuestra ventana
int y,                  // Posicion en el eje y de nuestra ventana
int nWidth,             // Ancho de nuestra ventana
int nHeight,            // Alto de nuestra ventana
HWND hWndParent,        // Apuntador al manejador padre de nuestra ventana
HMENU hMenu,            // Apuntador a alguna barra de menu
HINSTANCE hInstance,    // Apuntador a la instancia de nuestro programa
LPVOID lpParam          // Apuntador a los datos de nuestra ventana
);

Ponemos la funcion y llenamos los datos conforme nos los pide:

CreateWindowEx(
        NULL,
        “miVentana”,
        “Titulo!”,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

listo!!! terminamos, solo nos queda compilar y ejecutar y veremos nuestra hermosa ventana!!, esto es solo el principio!! no es muy laboreoso ya con practica, ya solo les falta estudiar los archivos de recursos que son con los que podremos poner botones, cajas de texto, texto label, barras, etc… eso viene en los manuales, que les dejo!!

 manualezWinApi.7z


Dejar un comentario so far
Deja un comentario



Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s



A %d blogueros les gusta esto: