Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
MFC permite al usuario de la aplicación personalizar cómo controla la entrada del teclado y el mouse. El usuario puede personalizar la entrada del teclado asignando métodos abreviados de teclado a comandos. El usuario también puede personalizar la entrada del mouse seleccionando el comando que se debe ejecutar cuando el usuario hace doble clic dentro de ventanas específicas de la aplicación. En este tema se 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 Personalizar en 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 .
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ú con un método abreviado de teclado. Después de que el usuario escriba un nuevo acceso directo, el botón Asignar se habilita. Cuando el usuario hace clic en este botón, la aplicación asocia el comando seleccionado a ese acceso directo.
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 CKeyboardManager objeto, 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 Teclado al cuadro de diálogo Personalización .
Personalización del mouse
En la ilustración siguiente se muestra la pestaña Mouse del cuadro de diálogo Personalización .
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 a 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
Inicialice un objeto CMouseManager llamando a CWinAppEx::InitMouseManager.
Consiga un puntero para el administrador del mouse mediante CWinAppEx::GetMouseManager.
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 Personalizar . Si no agrega ninguna vista, el acceso a la pestaña provocará una excepción no controlada. Después de crear una lista de vistas, la pestaña Mouse 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, debe 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.
Problemas 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, ejecuta la herramienta. 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, la vista procesa el comando que el atacante plantó. 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 tiene deshabilitada 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
Clase CKeyboardManager
CMouseManager (clase)
Implicaciones de seguridad de la personalización