Interceptar mensajes Windows en Menús Dinámicos.
Sin usar objetos Active-X.

 

Fecha: 31/Ago/2001
Autor: Alberto Martínez Pardo
Publicado: 05/Sep/2001



Interceptar mensajes en menús creados dinánicamente
sin recurir a Subclassing u objectos Active-X.

Cuando creamos menús dinámicamente (usando las APIS InsertItemMenu, ...
no es posible interceptar los mensajes de ratón através de un manejador
de mensajes habitual (como los publicados en esta sección).

Por ello es necesario recurrir a objetos Active-X que utilizen la técnica de Subclassing.

Por ejemplo, a mí me surgió esta necesidad al crear un reproductor de CDs que se mostrara
como icono de notificación (en la barra de tareas, junto al reloj) y que al pulsar sobre él
me mostrara una lista con los nombres de las canciones que contiene el CD, para poder
ir directamente a la canción que yo quisiera.

Por supuesto el nombre y el número de las canciones es variable, por ello para crear el menú,
recurrí a la función InsertItemMenu. Para poder interceptar los mensajes recibidos por este
menú use la utilidad de nuestro amigo Guillermo Son, pero me era imposible controlar los
eventos de ratón en los items añadidos al menú.

Probando, buscando y rebuscando sólo encontre la solucción de recurrir a un objeto Active-X
ya creado (MsgHook, ...).

Al final, he creado este proyecto que lo permite sin recurrir a todo esto.
Para ello, al crear los nuevos menús, los asigno un ID y con las
fuciones GetMenu y GetMenuItemInfo logro saber qué menu se ha seleccionado.

No se si me paso de listo, pero he buscado por todas las partes y no he
encontrado una solución más fácil.

Un saludo.
Alberto.

Espero que os sea útil.

Para cualquier comentario: alberto.martinez@bnpparibas.com


ir al índice

 Link a fuentes del programa (MenusDinamicos.zip). (6.30 KB)