viernes, 30 de diciembre de 2005

¡Avances con los menús!

Lean el post pasado...

luego de bloggear me puse a jugar Mythology. Acabé todo como a las 12:10 de la mañana, ¡vaya que soy bueno para recordar fechas! Y dormí; ni siquiera tenía sueño, pero sí ganas de dormir; me dije: "¡vamos!, tienes la mente muy cansada y ningún libro es partidario de los desvelos", y así me fui a la cama y

Desde la noche del último post, tardé unos 10 minutos en dormir y luego... ¡como angelito!

¿A qué hora me levanté? ¡11:30 de la mañana! Tirándole a 12 del día. Casi la misma hora de ayer.

29 de Diciembre del 2005.

Me levanté, vacilé un poco, desayuné y vi unas películas y luego volví a jugar Mario Bros; pasé a jugar Mythology, apagué la computadora y dormí unos 10 minutos.

Me levanté y ¡dale!, a seguirle con lo de los menús. Estaba algo desanimado, pues no había logrado muchos avances, más que el aprendizaje de algunas funciones, pero lo que me alentaba a seguir era el saber que me había cambiado unas ricas horas de sueño tapado en mi cobija burlándome del frío, por una noche de desvelo rompiéndome le cabeza (es el término más adecuado para lo que hice) pensando y pensando. Investigando en internet y releyendo lo de MSDN.

Perdí un poco de tiempo distrayéndome y llegué como a las 4 y media a encender la computadora y Jugar Mythology, esta vez yo le gané a la computadora: Yo=Set, Compu = Odín Terreno = Anatolía Dificultad = ...moderada... Mi salvación fue que descubrí que los Priest podían convertir anilmales cuando estaban con Set (soy novato en el Myth, llevo como 3 meses nada más).

Luego volví a lo de los menús. Pero con la diferencia de que había descubierto uno de mis problemas: la razón por la que flaqueaba mi hMenú era porque había creado el menú, Y SÓLAMENTE ESO, mas la compu necesita otros datos además de la instrucción de haber creado el menú: ¿dónde chingao lo quiero? Porque como VB es chingón permite que super mega hackers creen menús en ventanas distintas a las de su aplicación, siempre y cuando se sepan el ¡hWnd! que es lo que yo no designé. Mi función quedó:

hMenú = CreateMenu

Call SetMenu(hWnd, hMenú)

Cabe decir que cuando yo hago afirmaciones del tipo "mi problema era este" y doy por saltado un obstáculo, es poque me consta que mis códigos sirven: lo testeé de varias formas: con MsgBox que me dieran los valores tanto de hMenú como de SetMenu cada que se realizaran y después de haber realizado otras acciones.

Eso me alegró mucho y me motivó a que siguiera luchando con mis rivales las APIs, sensuales Valkirias que quieren llevarme al Walhala a darme de comer uvitas en la boca, pero yo les digo "aun no, nenas,¡ grrr...!".

Aun así, mis menús seguían sin aparecer si no lo hacía con el editor de menús.

Pero, ¡eran las 11 de la noche cuando sucedió eso! Y si digo que yo seguí programando entusiasmado por el espadazo que les di, ¿qué nos da a entender? ¡Me volví a quedar sin dormir! ¿Sueño? Me dio un poco pero el frio de la noche me lo quitó, junto con una partida de 10 minutos de Age of Empires (NO Mythology xD), y en este, sin claves y en Moderada, le gané fácilmente a la máquina (combate total). Veo que los de Microsoft sanaron errores de IA del Empires2 en el Mythology.

Luego alzé mi espada como Teseo en el Age of Mythology y proseguí.

Hice otro nuevo descubrimiendo: Mi función sí creaba los menús, eso es obvio, pero antes no me mostraba ni el menú ni las funciones porque, como dije hace 3 párrafos, seguía sin aparecer: estaba mal. Luego usé la función GetMenuItemCount pa' saber qué tan falso es lo que hago. La API es esta:

Public Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long

que es para saber la cantidad de submenús que hay en un menú; y como parámetro en hMenú ya no le pasé el que me creaba la máquina con el editor de menús, sino con mi hMenú que había sacado con CreateMenu y SetMenuBar y adivinen lo que pasó: ¡me contó todos los menús que yo había creado! Es decir, usé mi variable hMenú con con las apis, asigné el menú y creé unos 5 menús con la función que desarrollé hace no sé cuántos días (ahí pueden ver en los posts anteriores) y el resultado que me devolvió GetMenuItemCount fue no otro que 5. Hice pruebas creando un menú, dos, no creando menús y creando 5, y en todas me devolvió la cantidad de veces que había yo usado mi función, es decir, la cantidad de menús que había creado.

Cuando vi que me devolvía los valores correctos, deformé mi cara, me paré de la silla y grité sordamente "lo logré... lo logré... ¡lo logré!... ¡¡lo logré!!... ¡LO LOGRÉ!..." pero calladito, me puse las manos en la nuca y apreté, lentamente puse mis rodillas en el suelo y me comenzé a convulsionar, caí en el piso convulsionándome sin apartar mis manos de la nuca. Medio me paré y seguí convulsionándome hasta que mi emoción cesó. Eran como las 4 o 4 y media de la madrugada, por lo que todos estaban dormidos, todos excepto el miserable nerd de la biblioteca (le llamo así a este cuarto porque es donde tengo la compu y un madrero de libros y mi consola de Mario :D). Si mi madre o mi hermana me hubieran visto así me hubiera sentido algo estúpido, quizá, o bien hubiera seguido sin importarme el que estén ahí.

Como quiera que sea, terminé de retorcerme como niño de 10 años sin ropa y en el polo norte. Seguí alentado por mi nuevo triunfo y continué.

Lo único que me mantiene en pie hasta ahora es que VOY AVANZANDO. Me quemo horas la cabeza pensando e investigando, pero al final, el avance como ese que hice de SetMenu o como el de GetItemCount, son los que me despiertan y hacen que mis dedos no se cansen.

Pero el problema persistía: le daba F5 al entorno y al ejecutarse el programa no me aparecía la condenada barra de menús. Agunos estarán pensando: ¡usa DrawMenuBar! Pues yo les digo: "hago una llamda a DrawMenuBar al final de mi función Crear_Menú y hago otra en el evento Resize del frmMain.frm.

Con todo esto podemos deducir que el problema es el siguiente: mi barra de menús está creada, está asignada a mi formulario y mis menús están creados y en mi aplicación, pero por alguna extraña y demoníaca razón no se muestran.

Eso es a lo que me enfrento ahora: ¿cómo hacer visible mi barra de menú? Ahora que estoy con esto de los menús es cosa de que abro el Microsoft Visual Basic y abro la MSDN y la pongo en 'Menu Functions', que hasta en favoritos la tengo agregada para no tardarme en llegar. Ando cheque y cheque cada API para ver si alguna me da la respuesta; y vaya que lo ha hecho.

Vean que la hora de redacción en este post es 7:19 am, pero también aprecien lo que he escrito sin parar y sin descanso. En estos momentos son las 7:54 y mi internet es de promoción: se acaba a las 8:00 y como soy bien codo, pues mejor me desconecto para no pagar... ¡pues sí!

No sé si dormir o seguir o jugar Mythology, pero ya me salgo de esto y de los menús unas horas. Más al rato volveré para seguir.

Hilsen

No hay comentarios.:

Publicar un comentario