Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: rob1104 en 16 Julio 2010, 18:57 PM

Título: Principios básicos de programación Windows - Lenguaje C++
Publicado por: rob1104 en 16 Julio 2010, 18:57 PM
Este articulo también se encuentra en wiki.elhacker.net (http://wiki.elhacker.net/programacion/cc/articulos/principios-basicos-de-programacion-windows),
http://wiki.elhacker.net/programacion/cc/articulos/principios-basicos-de-programacion-windows

INTRODUCCIÓN

Hola a todos. En esta ocasión vamos a aprender un poco de programación Windows bajo el lenguaje C++ utilizando la API Win32.
Este es un tema muy poco tratado, por lo tanto la documentación que existe en español es muy escasa, y la mayoría se limita solo a explicar de forma muy abstracta, por lo que nos podemos quedar perdidos un poco al tratar de entender.
Antes de empezar debo advertir que necesitaras un nivel intermedio de conocimiento del lenguaje C/C++ para poder comprender al 100%. ¿Por qué? Simplemente porque a pesar de que veamos grandes cantidades de líneas y algunas palabras raras y desconocidas, no deja de ser lenguaje C++ en ningún momento. Y sigue la misma estructura que un programa en modo Consola, con pequeñas diferencias que veremos a lo largo de este tutorial.

API DE WINDOWS

Una API (Application Programming Interface) es un conjunto de funciones, librerías, métodos e instrucciones que nos ofrece un programa para poder programar sobre él. En esta ocasión, el sistema operativo Windows, como todo buen S.O., necesita ofrecer a sus desarrolladores todas las funciones indispensables para así hacerle la vida más fácil a la hora de programar el software. Ejemplos claros de la API de Windows son por ejemplo los eventos de las ventanas (cerrar, minimizar, maximizar, restaurar), son funciones que ya vienen programadas y el desarrollador solamente se encarga de manejarlas.


CONCEPTOS BASICOS DE PROGRAMACION WINDOWS


Elementos de una ventana
Una de las características más importantes de todos los programas Windows, es que están formados por ventanas (de ahí el nombre Windows). Pero lo que no muchos saben, es que todos los elementos de un programa son ventanas, un botón de comando es una ventana, una caja de texto también es una ventana, una etiqueta también, en fin, todo lo que vemos está formado por ventanas. Veamos los elementos básicos de un programa:

(http://rob1104.net/imagenes/tw/tutorialwin32api/1.png)

En la barra de título se puede apreciar, a parte del título de la aplicación, su icono de identificación y los botones predefinidos minimiza, maximizar/restaurar y cerrar, los cuales vienen implícitos con el borde de ventana.

Programas Windows y el Sistema operativo
Cuando escribimos un programa Windows, éste pasa a ser 'controlado' por el sistema operativo. Es decir, nuestro programa no tratará directamente con el hardware, y todo lo que haga el programa pasara primero por el núcleo de Windows, y éste será quien decida qué hacer.
Para entenderlo más fácilmente, existen dos formas de programar para un sistema operativo: Modo Usuario y Modo Kernel. En el segundo modo, es donde si se tiene acceso al hardware, es en el cual se escriben los controladores para que funcionen los distintos dispositivos correctamente. Programar en dicho modo, es un poco más complicado, ya que se requiere también conocimiento de lenguajes de más bajo nivel y conocer la estructura de hardware a detalle. Los errores que se cometan en ese modo no los puede manejar el sistema operativo, y en ocasiones tiene que detener todo y provocar alguna excepción para no dañar el equipo, en el caso de Windows, una pantalla azul apagando el sistema dando los detalles del error.
Por esta razón, existe el modo usuario o modo protegido, aquí como mencioné antes, es el sistema operativo quien toma las decisiones, y nosotros nos encargamos de programar que es lo que queremos hacer. Al producirse algún error, simplemente el sistema nos lo informa y cierra el programa conflictivo.

Windows y los Eventos

Programar en Windows sigue la metodología de la programación orientada a eventos, esto quiere decir, que al ejecutar un programa, éste se queda esperando que algún evento ocurra y así poder decidir qué hacer. La mayor parte del código fuente de un programa Windows está enfocada en procesar estos eventos, los cuales pueden ser provocados por el usuario, por el mismo programa ó por un programa tercero.

Mensajes
Un evento en Windows ocurre por ejemplo, al dar clic izquierdo en el mouse, al presionar cierta tecla, o cuando un contador llega cero. Windows graba cada evento en un mensaje, el cual es almacenado en una cola de mensajes para ser procesado por la función de nuestro programa encargada de ello. Un mensaje es como llama Windows a cada evento o acción realizada y que tiene que ser procesada por el programa, es decir, al producirse un mensaje, el programa ejecuta el código asociado a ese mensaje, y después regresa el control al sistema operativo, pero el programa sigue activo esperando más mensajes, y no terminará hasta que reciba el mensaje de que debe cerrarse.

Función WindowsProc()
Todo programa Windows, necesita una función específica la cual se encargará de procesar los mensajes. Esta función es comúnmente llamada WindowsProc() o wndProc(), aunque no requiere un nombre especifico, ya que se asigna a través de un puntero cuando se crea y registra la ventana, pero es conveniente seguir el estándar para poder identificar esta función rápidamente en caso de un programa muy extenso.
Afortunadamente, no es necesario escribir un código para todos los mensajes que puedan ocurrir, solamente para los que realmente vamos a necesitar, es decir, si no necesitamos el click derecho, no es necesario manejar ese mensaje, todos los mensajes no filtrados son procesados al final sin ejecutarse ningún código la realizar la acción.

Tipos de Datos Windows
Para facilitarnos un poco más la programación, Windows define algunos tipos de datos especiales usados específicamente por la API, estos son:

(http://rob1104.net/imagenes/tw/tutorialwin32api/2.jpg)

Las únicas palabras que nos pueden parecer nuevas de esta tabla serian: manejador e instancia.
Como menciona la tabla, un handle (manejador), no es más que un en número entero de 32 bits. ¿Para qué se usa? Para identificar un objeto de todos los que residen en memoria, es decir, viene siendo un número único que distingue un objeto de otro. Estos los asigna el sistema operativo por cada objeto nuevo creado en memoria.
Por ejemplo, al ejecutar la calculadora de Windows, el programa se abre y dibuja una ventana con muchos botones y una etiqueta para mostrar los dígitos. Ahí, la ventana principal de la calculadora tiene su propio handle, cada botón también tiene el suyo, así como la etiqueta. Esto ayuda, por ejemplo a la hora de programar, saber que ventana envió algún mensaje, o para saber a qué objeto o ventana el sistema va a devolver un resultado. Lo veremos más adelante con un ejemplo para que quede totalmente claro el concepto y utilidad de los manejadores.
Lo que es una instancia, lo veremos más adelante en el ejemplo, pero se puede resumir como un programa ejecutándose ya en la memoria. Por ejemplo al abrir un programa y visualizar su pantalla, ya tiene su instancia, ya depende de nosotros si dejamos que se puedan crear tantas instancias del mismo programa o solo una a la vez.


Notación estándar en programas Windows.

Para poder ajustarnos a una buena práctica de programación, es recomendable utilizar prefijos a la hora de crear las variables, Microsoft recomienda utilizar la notación húngara para el desarrollo de programas Windows, es una forma sencilla de declaración de variables, que consiste en utilizar un prefijo, seguido del nombre de la variable, altamente recomendado que tenga relación con el uso que se la va a dar a la variable. Esto hará más fácil la modificación del programa en el futuro, así como una mejor comprensión del código para programadores terceros.

(http://rob1104.net/imagenes/tw/tutorialwin32api/3.jpg)

Y así fácilmente podremos crear los nombres de las variables, para poder identificarla
HANDLE hInstance;
DWORD dwIntensidad;[/PHP]


ESTRUCTURA DE UN PROGRAMA WINDOWS

Para poder escribir el programa mas pequeño basado en la API de windows, necesitarás principalmente dos funciones:


Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: ABDERRAMAH en 16 Julio 2010, 19:15 PM
Muy Muy Muy buen aporte, gracias, faltaba algo así.  ;-)
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: globsharp en 16 Julio 2010, 19:30 PM
TE-MA-ZO. Muchas gracias rob1104, gran aporte merecedor de una chincheta.
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Ariath en 16 Julio 2010, 19:55 PM
Interfaces gráficas + C + CodeBlocks, justo uno de los temas que me encantan :O .

¡Grandísimo aporte! !!Chincheta now!!

SAlu2
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Akai en 16 Julio 2010, 20:17 PM
Increible  :o :o

Gran post.
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Horricreu en 16 Julio 2010, 20:32 PM
:o Me has dejado totalmente colapsado :o ¡Muy bueno! ¡Pero que muy bueno!

Saludos :P
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: rob1104 en 22 Julio 2010, 06:24 AM
Gracias a todos, veo que valió la pena el esfuerzo, espero en el transcurso de estas semanas ampliarlo y colocar algunos detalles más.

Saludos a todos
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: zangib en 23 Julio 2010, 18:07 PM
Muchas gracias habia leido varios tutoriales de esto y con ninguno me habia enterado de nada. Con este lo he entendido todo.  ;D
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: soez en 6 Agosto 2010, 17:32 PM
Muy bueno si señor  ;-) he entendido varias cosas que aun no comprendia. Espero con ganas el proximo capitulo  :D
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: flony en 26 Agosto 2010, 00:38 AM
listo a copiar
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Glas.jfcc en 29 Agosto 2010, 00:48 AM
HOOO te pasaste muy bueno el post, siempre he kerido aprender todo eso, gracias por la info, muchas gracias...saludos Glas.
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Mr.Blue en 29 Agosto 2010, 01:15 AM
solo dire que merece una chincheta :D
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: snakewather en 6 Septiembre 2010, 05:48 AM
 ;-)exelente gracias por la iformacion muy bien redactada saludos!
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: seby_g12 en 9 Septiembre 2010, 22:07 PM
Hola kmo stan? che dond puedo conseguir ste lenguaje busq x internet pero no encuentro naa me podrian pasar x fa... desde ya muchas gracias  ;D
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: linux1 en 24 Septiembre 2010, 07:19 AM
gracias me viene a pelo ya que estoy aprendiendo c y despues quiero ver algo de c++

ademas mi IDE es codeblocks y estaba buscando aprende a hacer aplicaciones con interfaz muuuuuuuuchaaaaaasss graaaaaciaaaas  ;-) ;-) :rolleyes:

espero puedas hacer mas!!

gracias

return 0;
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: d(-_-)b en 29 Septiembre 2010, 01:03 AM
Exelente, a cosas  como estas es que le llamo Material de buena calidad, Pues enseña de manera clara y directa, no con tantos rodeos como algunos libritos que lo que hacen es llenar al aprendiz de dudas que ni el mismo aclara.

Buen aporte.  :P

saludos...
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: MiRt en 4 Noviembre 2010, 20:34 PM
muchas gracias por la explicacion tan detallada, se hace agradable aprender asi de verdad me lo pase bien haciendolo todo :D
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Diego_Schneider en 29 Diciembre 2010, 02:05 AM
Disculpame si es muy tarde para hablar  :-X
Pero cuando le pongo "Compile current file" o "Build" no me aparece nada, no me crea archivos ni me pone nada en el "build log"

No sabes que puede pasar?
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: SaKaR en 12 Enero 2011, 09:45 AM
Buen aporte,  espero mas de ti sobre el tema

saludos
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: budas56 en 16 Junio 2011, 19:32 PM
Aportazooo ;-) ;-)
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: isi.apr en 4 Julio 2011, 20:59 PM
Disculepen mi ignorancia en c++ que librerias son las mas usadas?
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: ba$htian en 18 Octubre 2011, 21:15 PM
,  >:D excelente
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: cokitas en 12 Febrero 2012, 23:40 PM
muy buena información, me servirá mucho para poder programar
MUUUUUUUUUUCHAS  GRAAAAAAAACIAS  :xD
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: zonahurbana en 7 Diciembre 2012, 23:36 PM
Las imágenes ahora no se pueden ver correctamente...
Gracias por la información  ;D
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: reinosiberos en 24 Marzo 2013, 22:29 PM
no se ven las imagenes
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: alldex0204 en 28 Marzo 2013, 03:12 AM
bueno el k no a prende con este k se retire:muy muy bueno el post
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: bernii en 6 Enero 2014, 10:32 AM
 ;)Increible, muy buen post, podes ser profesor, me lo voy a imprimir
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: JPacheco001 en 14 Marzo 2015, 17:24 PM
gracias por el aporte muy buen tema
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Had3s en 26 Marzo 2017, 18:37 PM
   
   muy muy importante es genial  ;D ;D ;D ;D
Título: Re: Principios básicos de programación Windows - Lenguaje C++
Publicado por: Borito30 en 26 Marzo 2017, 18:44 PM
Esto viene de perlas gracias  ;D