sábado, 25 de junio de 2016

Tooltips en CSS



Para ver en Youtube haz click aquí (Recuerda Suscribirte)
Para ver en Youtube (segundo video) haz click aquí 
Para ver más videos de CSS click aquí
Dame like en facebook, click aquí


¿Que es un "Tooltip" ?

 Los tooltip son usados para mostrar información extra acerca de un elemento, justo cuando el usuario pasa el mouse por encima. Los podemos ver como una forma mas moderna del antiguo atributo "alt", para los que no lo saben, anteriormente este atributo nos permitía mostrar un texto cuando el usuario posaba el mouse encima, actualmente este atributo tiene otra funcionalidad totalmente diferente.

Tooltip de texto

  En el primer video (El segundo estará disponible mas tarde o mañana) les muestro como hacer un tooltip animado de texto, a continuación el código fuente :

La parte CSS :

<style type="text/css">
.tooltip {
background-color: black;
color: white;
padding : 5px;
position: absolute;
border-radius: 5px;
top: 15px;
visibility: hidden;
transition: opacity 1s, visibility 1s, top 1s;
opacity: 0;
}
.tooltip::after {
content: " ";
position: absolute;
top: 100%;
left: 50%;
border-style: solid;
border-width: 5px;
border-color: black transparent transparent transparent;
}
.txt:hover + .tooltip {
visibility: visible;
opacity: 1;
top: 10px;
}
</style>

El HTML:

<br>
<br>
<span class="txt">mi texto</span>
<div class="tooltip">
Información
</div>

  Las etiquetas <br> las coloco para que "mi texto" no quede muy arriba y poder colocar el tooltip arriba de este

Tooltip con imagenes

  En el segundo video, les enseño también a crear un toolttip, pero ahora este no esta compuesto de texto sino de imágenes.

EL CSS :

<style type="text/css">
.tooltip img{
width: 350px;
box-shadow: 5px 5px 10px black;
}
.nav {
list-style-type: none;
margin: 0;
padding: 0;
}
.tooltip {
position : absolute;
visibility: hidden;
opacity: 0;
transition : opacity 1s, visibility 1s;
}
.hori {
display: inline-block;
}
.hori a{
display: block;
padding: 8px;
color: white;
background-color: gray;
text-decoration: none;
}
.hori:hover a{
background-color: black;
}
.hori:hover .tooltip{
visibility: visible;
opacity: 1;
}
</style>

El html :

<ul class="nav">
<li class="hori">
<a href="#">Cuzco</a>
<div class="tooltip">
<img src="Cuzco.jpg" />
</div>
</li>

<li class="hori">
<a href="#">Louvre</a>
<div class="tooltip">
<img src="Louvre.jpg" />
</div>
</li>

<li class="hori">
<a href="#">El puente de la torre</a>
<div class="tooltip">
<img src="Puentetorre.jpg" />
</div>
</li>

<li class="hori">
<a href="#">Venecia</a>
<div class="tooltip">
<img src="Venecia.jpg" />
</div>
</li>

</ul>

  
  Si te gustó este tutorial recuerda suscribirte a mi canal de Youtube y darme like en Facebook  

domingo, 19 de junio de 2016

Curso de Java Ejercicio 5: Pirámide de asteriscos


Para ver en youtube haz click aquí
Para ir al curso de java click aquí
Para ver mas ejercicios como este, haz click aquí
Para ir a mi canal de youtube click aquí (Recuerda Suscribirte)

   Acabas de ver un ejercicio simple pero interesante, en donde usando bucles logramos dibujar de forma automática una pirámide de asteriscos, se te invita a pensar la forma de hacerlo tu mismo, si tienes dificultades, a continuación te presento una pista.

La pista

  La clave para llevar a cabo este ejercicio esta en los bucles anidados, debes hacer un bucle for y dentro de este colocar un bucle while

El código fuente

  A continuación el enlace para que descargues el código fuente de este ejercicio:

Curso de Java Clase 6: Bucle For y bucles anidados


Para ver en youtube click aquí
Para ir a la lista de repoducción del curso click aquí
Para ir a la lista de reproducción de los ejercicios click aquí
Para ir a mi canal de youtube click aquí  (Recuerda suscribirte)

    Acabas de ver lo que es el bucle for, quizás te estés preguntando: ¿Que diferencia tiene con el bucle while? La respuesta corta es en esencia ninguna ya que todos los bucles hacen prácticamente lo mismo, pero al tener una sintaxis y una implementación diferente estos se pueden adaptar a situaciones diferentes, eres tú como programador el que decide que bucle se adapta mejor al código que estas escribiendo.

Números del 1 al 100

  En el video viste el siguiente ejemplo:
package clase6;

public class Clase6 {

    public static void main(String[] args) {
        for(int i=0; i<=10; i++){
           System.out.println(i);
        }
    }

}

For con dos condiciones

package clase6;

public class Clase6 {

    public static void main(String[] args) {
    int num = 0;
        for(int i=0; i<=10; i++){
           num++;
           if(num >= 10){
             System.out.print(i);
             num = 0;
           }
          System.out.println("");
        }
    }

}

Bucles anidados

  El siguiente ejemplo escribe un "cuadro" de números usando un bucle while, dentro de un bucle for
package clase6;

public class Clase6 {

    public static void main(String[] args) {
        for(int i=0; i<=10; i++){
            int num = 0;
            while(num <= 10){
                System.out.print(i);
                num++;
            }
            System.out.println("");
        }
    }

}

sábado, 18 de junio de 2016

Menu desplegable en CSS, sin Javascript


Para ver en youtube haz click aquí
Para ir a mi canal haz click aquí  (Recuerda suscribirte)


    En el video que acabas de ver te enseñaré a crear un menú desplegable también conocido como "Dropdown menu" solo en CSS, aquí no hay nada de JavaScript, mucha gente hace esto no solo con JS sino que acude a librerías como JQuery cuando hacerlo de esta forma es bastante sencillo.
  El código que acabas de ver te va a funcionar en prácticamente todos los navegadores actualmente en uso, incluso en versiones viejas de Internet Explorer, como la versión 7, este último lo nombro porque es el que siempre tiende a hacer las cosas diferentes. Eso ha cambiado mucho con la llegada de Microsoft Edge el cual es ful compatible con CSS3, luego de ver el video, a través de esta entrada voy a explicar cada uno de los elementos, y al final puedes descargar el código fuente.

Propiedades CSS 

  •   Padding: Esta propiedad altera el espacio en blanco que se encuentra alrededor del contenido, al colocarle un número cada vez mas alto estamos haciendo este espacio mas grande, este espacio esta entre el elemento y el borde de nuestro objeto
  • Margin: Se refiere al espacio en blanco que se encuentra alrededor de nuestro objeto y fuera del borde, este espacio rodea a nuestro objeto desde fuera del borde
  • lyst-style-type: Elimina los adornos que tienen las listas, por lo general HTML solo crea un pequeño circulo del lado derecho del texto de los elementos de nuestra lista
  • background-color: Especifica el color de fondo de nuestro objeto
  • color: Aquí podemos definir el color de nuestro objeto, si hablamos de un enlace, por ejemplo, nos referimos al texto del mismo
  • text-decoration: Esta propiedad es casi exclusiva de los enlaces, elimina el subrayado del texto
  • display: Aquí especificamos la forma en la cual se van a mostrar los elementos, es importante destacar de que aquí solo voy a mencionar las propiedades usadas en el vídeo y algunas importantes, al final un enlace donde podrán verlas todas :
    • inline: Los despliega en orden de linea
    • inline-block: En linea y en forma de bloque
    • none: No muestra el elemento, hace lo mismo que usar "visibility:hidden", pero recomiendo utilizar visibility ya que esta es animable, en cambio display no lo es
    • block: Lo muestra como un bloque
  • font-family: Aquí podemos cambiar el tipo de fuente
  • position: Aquí le decimos como vamos a posicionar los elementos, con el valor "absolute" creamos una capa flotante, que no afecta la disposición de los demás elementos
  • visibility: Aquí podemos especificar si el elemento en cuestión va a ser visible o no
  • opacity: Recibe valores entre 1 y 0, con esto creamos una transparencia
  • transition: Esto nos permite crear una animación usando los estados de nuestro elemento.
Para más información sobre display click aquí

¿Cual es la diferencia entre Padding y Margin?

  Padding se refiere al espacio en blanco que se encuentra, entre el borde y el contenido, no saliendo este fuera del borde.
 Margin es el espacio en blanco que está fuera del borde y que separa nuestro objeto de otros objetos.

Código fuente

  En el enlace a continuación podrás descargar el código fuente :

domingo, 12 de junio de 2016

Curso de Java Ejercicio #4 : Juego de Preguntas con bucle While


Para ver en Youtube click aquí
Para ir a mi canal click aquí
Para ir a la lista de reproducción del curso click aquí
Para ir a la lista de reproducción de los ejercicios click aquí


Lo que acabas de ver

  En el video que acabas de ver mas arriba, modificamos el juego del ejercicio 1, y le agregamos el bucle while, con esto podemos exigir una respuesta correcta y restar puntos cada vez que se responda mal
  El secreto para poder hacer el ejercicio es algo tan simple que solo ocupa el espacio de un caracter : "!" este signo de exclamación, en Java es un operador lógico de negación, lo que hace es invertir el valor de una condición, veamos el siguiente ejemplo
int num = 5;
if(num == 5){
   .....
}
  La condición dada arriba se va a ejecutar como verdadera, ya que obviamente lo es, veamos que ocurre si agregamos el operador de negación
int num = 5;
if(!num==5){
  .....
}
  En este caso no se va a ejecutar, ya que el operador de negación invierte su valor, ahora solo se va a ejecutar si la variable "num" tiene algún otro valor que no sea 5

  En nuestro juego de preguntas lo que necesitamos es colocar como condición "que la respuesta sea falsa" y eso lo hacemos con el operador de negación.

El código fuente

  Si quieres descargar el código fuente de este ejercicio haz click aquí


Curso de Java Ejercicio #3 : Test de primalidad


Para ver en youtube click aquí
Para ir a mi canal de Youtube has click aquí  (Recuerda hacer click en suscribirse)
Para ir a la lista de reproducción del curso click aquí
Para ir a la lista de reproducción de los ejercicios click aquí

Saber si un número es Primo

  En el video que acabas de ver te invito a que intentes crear un programa que detecte si un número es primo o no, para hacerlo necesitas conocer sobre los bucles "while", las sentencias de control "if" y los operadores de incremento y decremento, a continuación los enlaces a cada tema :
     En la clase anterior a este ejercicio, en la entrada correspondiente (el primer enlace en la lista de arriba), aprendimos acerca del operador de módulo, el cual se escribe con el símbolo de porcentaje (%) este operador permite calcular el resto de una división, por ejemplo las siguientes operaciones con el operador de módulo darían los siguientes resultados
10%3 = 1 ;  5%2 = 1  15%4=3

  Este operador es la clave para resolver este ejercicio, ya que una operación con un número, usando este operador, solo va a dar 0, cuando es primo, si el otro operando es el mismo número o uno (1). Por lo que el ejercicio consiste en hacer un bucle que "pruebe" todos los números menores hasta llegar a uno y buscar bajo que números es divisible.

Código Fuente

  Para descargar el código fuente del ejercicio has click aquí


  

Operadores Aritmeticos y el Bucle While Java

Para ir a los ejercicios :  Ejercicio 1,   Ejercicio 2

La aritmética en Java

   En videos y entradas anteriores hemos visto que podemos escribir operaciones aritméticas directamente en nuestro código, y Java al igual que una calculadora resolverá la operación, veamos el siguiente ejemplo :
System.out.println(2+4);
En este caso la salida en consola sería la siguiente : 6

Los operadores

  Hay algunos operadores que como veremos son bastante obvios, los signos aritméticos que conocemos realizan las mismas operaciones de la matemática :
  • Suma + operador "más"
  • Resta - operador "menos"
  • Multiplicación o Producto * operador "por" Se escribe con un asterisco
  • División / operador "entre"
  Pero hay otros operadores en Java que podrían no parecer tan obvios desde el punto de vista matemático.

El operador de Módulo

  Este operador nos va a realizar una división, pero en lugar de mostrarnos el cociente, nos va a mostrar el resto, este operador lo vamos a escribir con el signo de porcentaje "%", ejemplo :

10%3 = 1
Ya que hace la división "entera" osea no de forma exacta sino únicamente usando números enteros, de esta forma :
10/3 = 3 y nos sobra 1  otros ejemplos
15%4 = 3  ;  50%3 = 2

Los operadores de incremento y decremento

  En el video que acompaña a esta entrada vemos un operador formado de dos signos "más" (++), esto se conoce como operador de incremento, y no es el único, existen tres operadores de incremento : "++" , "+=" y "*="
  Al usar el primero con una variable, numérica, estamos incrementando su valor en uno (1) cada vez que se ejecute la respectiva linea de código, ejemplo
 Si usamos el operador ++ fuera de un bucle
int num = 0;
num++; //aquí aumentamos en 1 el valor de la variable
num++; // aquí lo volvemos a hacer
num++; // aquí lo hacemos una vez más
System.out.println(num);
La salida en consola será : 3
y si llegamos a ejecutar 100 veces esa linea de código el valor de num llegaría a 100, tal cual como vimos en el video con el bucle while

  Con el segundo (+=) podemos aumentar el valor de la variable en la cantidad que especifiquemos, por ejemplo si usando el bucle while quisiéramos mostrar los números del 1 al 100 pero de 2 en 2, haríamos lo siguiente

int num = 0;
while(num <= 100){
    System.out.println(num);
    num+=2;
}
  El resultado en consola serían los números del 2 al 100 pero de 2 en 2 osea :
0, 2,4,6,8,10....100

  También lo podemos hacer de 3 en 3 de la siguiente forma

int num = 0;
while(num <= 100){
    System.out.println(num);
    num+=3;
}

   El tercer operador de incremento "*=" nos permite aumentar el valor no de forma aditiva, si no multiplicando, de la siguiente manera :
int num = 2;
num*=2; // el valor será ahora 4 ya que 2*2 = 4
num*=2; // el valor será ahora 8 ya que 4*2=8
num*=2; // el valor ahora será 16 porque 8*2=16
num*=2; // aquí tenemos 32 ya que 16*2=32

  Y los mismo es válido para cualquier número

El decremento

    Existen 2 operadores de decremento, la lógica detrás de ellos es la misma que con los anteriores; tenemos los siguientes : "--", "-=" y "/="
  En el caso del primero disminuye el valor de nuestra variable en 1 cada vez que se ejecute, podríamos usarlo para escribir los números del 100 al 0 de la siguiente manera :
int num = 100;
       while(num >= 0){
           System.out.println(num);
           num--;
       }
La salida en consola sería : 100, 99, 98, 97 ....3,2,1,0

  El segundo nos permite disminuir el valor en la cantidad que queramos, por ejemplo :
int num = 100;
       while(num >= 0){
           System.out.println(num);
           num-=2;
       }
El resultado en consola sería el siguiente : 100, 98, 96, 94, 92....6,4,2,0

  Y por último, el operador "/=" nos permite disminuir el valor de la variable dividiéndolo por la cantidad que especifiquemos:
int num = 100;
       while(num > 0){
           System.out.println(num);
           num/=2;
       }
El resultado en consola sería : 100, 50, 25, 12, 6, 3, 1
  En este último ejemplo en lugar de usar la condición "num >=0" usamos "num>0", la razón de esto te la dejo de tarea, escríbanme la respuesta en los comentarios

sábado, 11 de junio de 2016

Juego de Pong en Javascript sin Canvas PRINCIPIANTES

Parte uno

Parte dos

Parte tres





Para ver en Youtube: Parte uno, Parte dos, Parte tres
Para ir a mi canal de Youtube haz click aquí
Para ver la lista de reproducción haz click aquí


Pong Javascript sin Canvas

  En el video de arriba te enseño a crear tu propio juego de pong sin usar la etiqueta canvas, esto es interesante solo desde el punto de vista didáctico, por eso el video esta orientado a principiantes, en lugar de dibujar gráficos usamos elementos "div" 

Plantilla HTML

  El tutorial esta orientado en Javascript solamente, no se va a explicar nada de HTML ni CSS, por lo que te recomiendo descargarte la siguiente plantilla HTML ya que partimos de ella en el tutorial :

Códigos de teclas en Javascript

  Para poder conocer los códigos de cualquier tecla en Javascript puedes usar la siguiente herramienta que he puesto a tu disposición, la puedes usar cuantas veces quieras para cualquier tutorial así no sean dictados por mí

Código fuente

  Si haz visto el tutorial mill veces y todavía no logras que funcione, puedes descargar el código Javascript completo y compararlo con el tuyo :

domingo, 5 de junio de 2016

Curso de Java clase 4 : Las sentencias de Control parte 2


Break y Default necesarias pero no imprescindibles

   Como acabamos de ver, un "switch", nos permite ejecutar diferentes acciones que dependen del valor de la variable que evaluemos, las palabras reservadas "switch" y "case" son imprescindibles para la construcción de la sentencia. Pero nos encontramos con dos palabras que son opcionales : "break" y "default" ¿que pasa si no las usamos? La primera hace que nuestro código se ejecute de forma mas eficiente, al parar la ejecución una vez que la condición se cumple, si quitamos el "break" se van a evaluar todas las condiciones independientemente si ya se encontró la condición "verdadera" o no, con lo que se pierde tiempo y memoria, en una aplicación tan pequeña como la que construimos en esta clase eso podría no importar mucho, pero en aplicaciones complejas tenemos que tener esto en cuenta.
   La otra palabra reservada opcional es "default", en el ejemplo que vimos en el video pareciera imposible no usarla, ya que si nuestro IDE detecta algún error no nos va a dejar compilar, pero no es así, el uso del "default" evita ejecuciones inesperadas del código.

Calculadora de consola

   En el ejercicio 2 del curso hicimos una calculadora de consola usando la sentencia "if", en el enlace a continuación puedes ver el código fuente de ese ejercicio
  Ahora hacemos exactamente el mismo programa, pero usando la sentencia "switch", probablemente te estarás preguntando ¿Hay alguna diferencia entre hacerlo de una u otra forma? Ciertamente en el mundo de la programación hay no una sino mil formas de escribir un algoritmo, y no siempre es válido decir que una forma es mejor que la otra; sin embargo es importante mencionar que el programa hecho con "switch" es un poco mas eficiente gracias al "break". A continuación el enlace al código fuente del programa hecho en la clase :

Como crear una ventana sencilla en C++


Para ir a mi canal de youtube haz click aquí
Para ir a la lista de reproducción haz click aquí

SI USAS VISUAL STUDIO POR FAVOR HAZ CLIC AQUÍ


Resumen del video

     En el video que acabas de ver, podemos primero decir que una aplicación de Windows se divide en 6 partes:
  1. El proceso de mensajes, como vimos una función que tiene que ser creada de acuerdo a unos parámetros, específicamente tiene que tener 4 variables que pasarle, no se puede crear de otra forma
  2. Nuestro método "WinMain", estamos acostumbrados a que en c++ nuestro método de arraque sea "main", pero en este caso lo reemplazamos por el ya nombrado, este debe tener los 4 parámetros que vimos en el vídeo
  3. Nuestra clase de ventana, que no es mas que todos los valores en común que van a tener todas las ventanas de nuestra aplicación. No debe confundirse con "clase" de programación orientada a objetos, como vimos es una "estructura"
  4. Nuestra ventana, se crea con el método "CreateWindow", mas abajo voy a hablar mas en detalle de esta función
  5. El bucle de mensajes, quizá la parte mas importante, aquí paramos un poco la ejecución de modo que nuestra ventana pueda ser usada, y capturamos todos los mensajes provenientes tanto del S.O como de nuestra propia aplicación.
  Cabe destacar que en una que otra ocasión he escuchado que el eslogan de C++ es: "Escribelo una vez, compilarlo donde sea", esto como una especie de comparación con el eslogan de Java, es muy importante mencionar que aquí no es para nada el caso, si quisiéramos compilar este código en linux o en mac, no nos va a funcionar nada, ya que estamos usando la API de Windows, en otras palabras estamos usando las herramientas y bloques de construcción que el sistema Windows nos provee, y estos no estan presentes en otros sistemas. Si quisiéramos crear una ventana que se pudiera compilar tanto en Windows como en linux, deberíamos utilizar una librería gráfica presente en ambos sistemas, GTK+ podría ser una opción, pero no viene por defecto en Windows, para que nuestra aplicación pudiese funcionar esta librería debería estar ya instalada.

CW_USEDEFAULT

  Quice colocar esto de primero ya que se me olvidó explicarlo en el video, la utilizamos para dar valores referentes a la posición "x" y "y" de nuestra ventana. Este permite que el sistema le provea una posición por defecto a la ventana, en lugar de definirla nosotros explicitamente, podemos en su lugar escribir las coordenadas directamente nosotros, de modo que la ventana se ubique como queramos

Los mensajes

  Los mensajes los podemos comparar a los eventos presentes en casi cualquier lenguaje, nos dicen cosas que "pasan" en nuestra aplicación, a continuación voy a listar algunos, los que a mi criterio son los más importantes :
  1. WM_DESTROY y WM_QUIT : Son hermanos, ambos sirven para finalizar la aplicación, el primero se envía en el momento que se hace click en el botón de cierre. El segundo lo envía la función "PostQuitMessage" que como vimos en el video solo se ejecuta al recibir el primero, este método logra que la función "GetMessage" devuelva "falso" y por lo tanto nuestro bucle de mensajes se deja de ejecutar, al hacerlo nuestra aplicación llega a su fin. Quizá ahora te estes preguntando ¿Porque no enviar "WM_QUIT" directamente? Esto es así en el caso de que quisiéramos preguntarle al usuario antes de terminar la aplicación, una vez que el ya ha hecho click en el botón de cierre, si realmente quiere cerrarla o guardar el trabajo antes, por ejemplo. También existe WM_CLOSE el cual es similar a WM_DESTROY
  2. WM_CREATE : Se envía al momento de solicitar a una aplicación la creación de una ventana, es por lo tanto llamada al momento en que funciones como "CreateWindow" y "CreateWindowEx" son llamadas, pero el mensaje es enviado antes de que la función devuelva un valor
  3. WM_COMMAND : Este mensaje puede considerarse el evento de click, cuando por ejemplo el usuario hace click en un botón en nuestra ventana o en un menú de la barra de menús. En los valores WPARAM y LPARAM podemos encontrar la información necesaria para saber de donde provino el evento, por ejemplo si el WPARAM es igual a BN_CLICKED entonces estamos hablando de un click a un botón, luego buscamos en el LPARAM que botón fue presionado
  4. WM_MOUSEMOVE : Cuando el mouse se mueve sobre la ventana, en el LPARAM se van a guardar las coordenadas "x" y "y" del mismo
  5. WM_MOUSEWHEEL, WM_MOUSEHOVER : Son enviados cuando la rueda del mouse es girada y cuando el ratón entra, respectivamente a la ventana en cuestión
  No da tiempo ni espacio para cubrir todos los mensajes, hay mensajes tan específicos como "WM_USERCHANGED",  que lo envía el sistema operativo a todas las ventanas cuando otro usuario ha iniciado sesión, lo envía justo después de cargar las configuraciones especificas de ese usuario. Aquí hay una lista completa de todos los mensajes presentes en Windows para que se hagan una idea, en total aparecen 52429, aunque es importante mencionar que no todos estos mensajes son utilizables, ya que algunos son utilizados por otros mensajes como por ejemplo "WM_NCCREATE" que se envía justo de antes de un "WM_CREATE"

CreateWindow y CreateWindowEx

  En el video se utilizó la primera, es importante mencionar que no hay mucha diferencia en la implementación, esta de hecho es solo una, "CreateWindowEx" tiene los mismos parámetros en el mismo orden que la primera, pero se le agrega un parámetro al inicio, este se refiere al "estilo extendido" y este es solo una opción mas para cambiar la apariencia o comportamiento de nuestra ventana, por ejemplo si creamos una ventana con el estilo "WM_OVERLAPPEDWINDOW" y luego aplicamos diferentes estilos extendidos, obtendremos lo siguiente para cada estilo :

Con WS_EX_TOOLWINDOW obtenemos la siguiente apariencia, podemos notar que parece una ventana de opciones o herramientas, como su nombre lo dice
Tenemos también a WS_EX_TOPMOST, aquí no vemos cambios en la apariencia de la ventana, ya que en este caso la ventana se va a ubicar al frente de cualquier ventana, ya sea perteneciente a la aplicación o no. Igualmente que con los mensajes sería imposible cubrirlo todo aquí, pero creo que estos dos ejemplo son suficientes para que adquieran suficiente entendimiento

Referencia completa

  En dos de la secciones de más arriba finalizo explicando que no hay espacio para toda la información, mi objetivo en los tutoriales es explicar para que ustedes entiendan, una vez se logre suficiente entendimiento podrán hacer maravillas con tan solo tener la referencia. A continuación les dejo un enlace a la referencia completa de Windows, pero desgraciadamente esta en inglés, así que quizás no sea de utilidad para todos

Conclusiones

  Si ya sabes programar interfaces gráficas en algún otro lenguaje como Java o Visual Basic, esto quizás te hará parecido abrumador, ya que la cantidad de elementos y código necesario en este caso es mucho mayor. Pero ten en cuenta que aquí estamos escudriñando el API de Windows a un nivel mucho más bajo, lo cual, en general nos ayudará a crear programas mas rápidos y mas eficientes.

Descargas