Ver Mensaje Individual
  #2 (permalink)  
Antiguo 29/08/2011, 13:23
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Respuesta: Dudas de principiante en Win Api

Hola de nuevo.
Tus cuestiones si son algo complicadas de entender. Por eso en lo personal, no me agrada la WINAPI.

Pero la experiencia me ha llevado a usarla y a entenderla hasta cierto punto.

En primer instancia.
Un "requisito" que te pide Windows para programar un aplicacion con ventanas es de que tengas un WinMain, a diferencia de otros sistemas operativos donde con el mismo main() es mas que suficiente.

Aun asi, WinMain es en escencia muy parecida a main.

Podrias por ejemplo hacer un programa que solo tuviera winmain y ya.

Lo cual crearia una aplicacion que no mostraria nada en pantalla(no ventanas, no consolas, nada), solo tendria su espacio en la barra de ventanas. Y bueno, como buena aplicacion sin nada, se cerraria automaticamente tras un parpadeo(Corrijanme si me equivoco).

Ahora, una vez teniendo es como base, se necesitan 2 cosas.
Una ventana en este caso. Que veo que ya conoces las funciones mas importantes para crear ventanas. Lo complicado de esto, es que hay millones de maneras y combinaciones diferentes de crear ventanas(colores, tamaños, tipos y otros parametros obscuros). Aqui lo importante es saber que es lo mas usual, y a menos que sepas ya que quieres algo "no usual" entonces te metes a investigar los parametros. Por ejemplo. Algo usuarl, seria una ventana con los colores predeterminados, de un tamaño mmm de 100x100, con sus botones de minimizar, maximizar y cerrar.

Ahora, ya tienes una ventana, sin embargo no por crearla significa que ya se ve. Tienes que indicarle al Windows varias cosas, entre ellas, decirle que has creado una nueva ventana y que quieres como "registrarla" para que windows la tenga en su "lista de ventanas", despues informarle que tu ventana ya esta lista para ser mostrada. Entonces, a partir de ahi, Windows hace la "magia" de como y cuando mostrar tu pantalla. Tu no programas los botones minimizar o cerrar. Windows se encarga de manejar todo eso por ti.(En realidad se trata de el ambiente grafico de windows).
Por ejemplo si tienes varias aplicaciones abiertas, Windows tiene que decidir cuando se y cuando no se ve tu aplicacion. Todo esto qeuda escondido tanto para el usuario como para el programador.

Ahora. Ya sabemos como mostrar una ventana.
Pero queremos poder controlar lo que sucede dentro de esa ventana.
A diferencia de otros sistemas operativos, Windows usa un sistema de eventos-mensajes.

La manera de que Windows y tu se comuniquen con la ventana es a traves de mensajes.

Por lo mismo creas un loop(while, do while o for) que se encargue de 2 cosas, de procesar lo mensajes que te interesan, y de enviar los mensajes a tu aplicacion.

En este caso, es lo que el ciclo principal hace.
Dentro del ciclo, tienes una funcion que lo que hace es interceptar los mensajes que envia la aplicacion.
Sin embargo no nos interesan toooodos los mensajes ya que son muuuuchos y a estas alturas no todos son de utilidad.

Si no mal recuerdo algunos mensajes comunes son WM_CREATE, WM_COMMAND, WM_DESTROY, etc. Puedes ver en la MSDN para que sirven especificamente.

Pero bueno, el mensaje por si solo no siempre ayuda mucho. Muchas veces la aplicacion o el sistema operativo necesita enviar datos aparte del mensaje.

Entonces usa variables parametro, que por lo comun acostumbran llamarlas wparam o lparam.
Y pues haciendo especulacion supongo que son de 32 bits.
Estas variables van a contener los datos que quieres enviar o que acabas de recibir junto con el mensaje.

Que datos hay ahi?? eso depende del mensaje. Para eso hay que ver la MSDN y ver en que formato se envian o reciben los datos.
A veces 2 datos diferentes se juntan en una sola variable. Como 2 datos de 16 bits.
Entonces para separarlos hay de 2, o usamos los operadores binarios &, |, ^, o usamos las macros que la WINAPI ofrece: LOWORD, HIWORD.

por eso la instruccion

switch(LOWORD(wParam))

significa que vamos a filtrar los valores bajos de 16 bits de la variable wParam y pues con los cases ya filtramos los datos, que muchas veces son mas mensajes(submensajes).

Espero que con esta explicacion entiendas la estructura de un programa Windows.
El chsite no es saber que significan los tipos de variables o ver como es una estructura. El punto es entender los pilares de una aplicacion windows sencilla.
Que en este caso podria yo decir que es el sistema de eventos-mensajes.
Si entiendes bien este sistema, puedes simplificar muuucho los codigos, y veras que al final de cuentas no va a diferir taaanto de una aplicaicon para consola.

Saludos