Personalización del teclado y del mouse

MFC permite al usuario de la aplicación personalizar la forma en que maneja la entrada del teclado y del mouse. El usuario puede personalizar la entrada del teclado asignando métodos abreviados de teclado a los comandos. El usuario también puede personalizar la entrada del mouse seleccionando el comando que debe ejecutarse cada vez que el usuario haga doble clic dentro de determinadas ventanas de la aplicación. Este tema explica cómo personalizar la entrada de la aplicación.

En el cuadro de diálogo Personalización, el usuario puede cambiar los controles personalizados para el mouse y el teclado. Para mostrar este cuadro de diálogo, el usuario apunta a Personalizaren el menú Ver y, a continuación, hace clic en Barras de herramientas y acoplamiento. En el cuadro de diálogo, el usuario hace clic en la pestaña Teclado o en la pestaña Mouse.

Personalización del teclado

En la ilustración siguiente se muestra la pestaña Teclado del cuadro de diálogo Personalización.

Keyboard tab in the Customize dialog box.
Pestaña de personalización del teclado

El usuario interactúa con la pestaña del teclado para asignar uno o varios métodos abreviados de teclado a un comando. Los comandos disponibles se muestran en el lado izquierdo de la pestaña. El usuario puede seleccionar cualquier comando disponible en el menú. Solo se pueden asociar comandos de menú a un método abreviado de teclado. Después de que el usuario escriba un nuevo método abreviado de teclado se habilita el botón Asignar. Cuando el usuario hace clic en este botón, la aplicación asocia el comando seleccionado a ese método abreviado de teclado.

Todos los métodos abreviados de teclado asignados actualmente se muestran en el cuadro de lista de la columna derecha. El usuario también puede seleccionar métodos abreviados de teclado individuales y eliminarlos, o restablecer todas las asignaciones de la aplicación.

Si desea admitir esta personalización en la aplicación, debe crear un objeto CKeyboardManager. Para crear un objeto CKeyboardManager, llame a la función CWinAppEx::InitKeyboardManager. Este método crea e inicializa un administrador de teclado. Si crea manualmente un administrador de teclado, debe llamar a CWinAppEx::InitKeyboardManager para inicializarlo.

Si usa el asistente para crear la aplicación, el asistente inicializará el administrador de teclado. Una vez que la aplicación inicializa el administrador de teclado, el marco agrega una pestaña deTeclado al cuadro de diálogoPersonalización.

Personalización del mouse

En la ilustración siguiente se muestra la pestaña Mouse del cuadro de diálogo Personalización.

Mouse tab in the Customize dialog box.
Pestaña de personalización del mouse

El usuario interactúa con esta pestaña para asignar un comando de menú a la acción de doble clic del mouse. El usuario selecciona una vista en el lado izquierdo de la ventana y, a continuación, usa los controles del lado derecho para asociar un comando con la acción de doble clic. Después de que el usuario haga clic en Cerrar, la aplicación ejecuta el comando asociado siempre que el usuario haga doble clic en cualquier parte de la vista.

De forma predeterminada, la personalización del mouse no está habilitada al crear una aplicación mediante el Asistente.

Para habilitar la personalización del mouse

  1. Inicialice un objeto CMouseManager llamando a CWinAppEx::InitMouseManager.

  2. Consiga un puntero para el administrador del mouse mediante CWinAppEx::GetMouseManager.

  3. Agregue vistas al administrador del mouse mediante el método CMouseManager::AddView. Haga esto para cada vista que quiera agregar al administrador del mouse.

Una vez que la aplicación inicializa el administrador del mouse, el marco agrega la pestaña Mouse al cuadro de diálogo Personalización. Si no agrega ninguna vista, el acceso a la pestaña provocará una excepción no controlada. Después de que haya creado una lista de vistas, la pestañaMouse está disponible para el usuario.

Al agregar una nueva vista al administrador del mouse, se le asigna un identificador único. Si desea admitir la personalización del mouse para una ventana, deberá procesar el mensaje de WM_LBUTTONDBLCLICK y llamar a la función CWinAppEx::OnViewDoubleClick. Cuando se llama a esta función, uno de los parámetros es el identificador de esa ventana. Es responsabilidad del programador realizar un seguimiento de los números de identificador y de los objetos asociados a ellos.

Cuestiones de seguridad

Como se describe en herramientas definidas por el usuario, el usuario puede asociar un identificador de herramienta definido por el usuario con el evento de doble clic. Cuando el usuario hace doble clic en una vista, la aplicación busca una herramienta de usuario que coincida con el identificador asociado. Si la aplicación encuentra una herramienta coincidente, la ejecuta. Si la aplicación no encuentra una herramienta coincidente, envía un mensaje de WM_COMMAND con el identificador a la vista en la que se hizo doble clic.

La configuración personalizada se almacena en el registro. Al editar el registro, un atacante puede reemplazar un identificador de herramienta de usuario válido por un comando arbitrario. Cuando el usuario hace doble clic en una vista, ésta procesa el comando plantado por el atacante. Esto podría provocar un comportamiento inesperado y potencialmente peligroso.

Además, este tipo de ataque puede omitir las medidas de seguridad de la interfaz de usuario. Por ejemplo, supongamos que una aplicación ha deshabilitado la impresión. Es decir, en su interfaz de usuario, el menú Imprimir y el botón no están disponibles. Normalmente, esto impide que la aplicación imprima. Pero si un atacante editó el registro, un usuario ahora podría enviar el comando de impresión directamente haciendo doble clic en la vista, omitiendo los elementos de la interfaz de usuario que no están disponibles.

Para protegerse contra este tipo de ataque, agregue código al controlador de comandos de la aplicación para comprobar que un comando es válido antes de ejecutarlo. No dependa de la interfaz de usuario para evitar que se envíe un comando a la aplicación.

Consulte también

Personalización de MFC
CKeyboardManager (clase)
CMouseManager (clase)
Implicaciones de seguridad de la personalización