Herramientas definidas por el usuario

MFC admite herramientas definidas por el usuario. Una herramienta definida por el usuario es un comando especial que ejecuta un programa externo especificado por el usuario. Puede usar el proceso de personalización para administrar las herramientas definidas por el usuario. Sin embargo, no puede usar este proceso si el objeto de aplicación no se deriva de CWinAppEx Class. Para obtener más información sobre la personalización, consulte Personalización de MFC.

Si ha habilitado la compatibilidad con herramientas definidas por el usuario, el cuadro de diálogo de personalización incluye automáticamente la pestaña Herramientas. En la siguiente ilustración se muestra la página Herramientas.

Tools tab in the Customize dialog box.
Pestaña Herramientas del cuadro de diálogo Personalización

Habilitar la compatibilidad con herramientas definidas por el usuario

Para habilitar las herramientas definidas por el usuario en una aplicación, llame a CWinAppEx::EnableUserTools. Sin embargo, primero debe definir varias constantes en los archivos de recursos de la aplicación para usarlas como parámetros para esta llamada.

En el editor de recursos, cree un comando ficticio que use un identificador de comando adecuado. En el ejemplo siguiente, usamos ID_TOOLS_ENTRY como identificador de comando. Este identificador de comando marca una ubicación en uno o varios menús donde el marco insertará las herramientas definidas por el usuario.

Debe reservar algunos identificadores consecutivos en la tabla de cadenas para representar las herramientas definidas por el usuario. El número de cadenas que debe reservar es igual al número máximo de herramientas de usuario que los usuarios pueden definir. En el ejemplo siguiente, se denominan ID_USER_TOOL1 a ID_USER_TOOL10.

Puede ofrecer sugerencias a los usuarios para ayudarles a seleccionar directorios y argumentos para los programas externos a los que se llamará como herramientas. Para ello, cree dos menús emergentes en el editor de recursos. En el ejemplo siguiente, se denominan IDR_MENU_ARGS y IDR_MENU_DIRS. Para cada comando de estos menús, defina una cadena en la tabla de cadenas de la aplicación. El identificador de recurso de la cadena debe ser igual al identificador de comando.

También puede crear una clase derivada de CUserTool Class para reemplazar la implementación predeterminada. Para ello, pase la información de runtime de la clase derivada como cuarto parámetro en CWinAppEx::EnableUserTools, en lugar de RUNTIME_CLASS(CUserTool Class).

Después de definir las constantes adecuadas, llame a CWinAppEx::EnableUserTools para habilitar las herramientas definidas por el usuario.

La siguiente llamada de método muestra cómo usar estas constantes:

EnableUserTools(ID_TOOLS_ENTRY,
                ID_USER_TOOL1,
                ID_USER_TOOL10,
                RUNTIME_CLASS(CUserTool),
                IDR_MENU_ARGS,
                IDR_MENU_DIRS);

En este ejemplo, la pestaña Herramientas se incluirá en el cuadro de diálogo Personalización. El marco reemplazará cualquier comando que coincida con el identificador de comando ID_TOOLS_ENTRY en cualquier menú por el conjunto de herramientas de usuario definidas actualmente cada vez que un usuario abra ese menú. Los identificadores de comando ID_USER_TOOL1 a ID_USER_TOOL10 están reservados para su uso para herramientas definidas por el usuario. La clase CUserTool Class controla las llamadas a las herramientas de usuario. La pestaña de herramientas del cuadro de diálogo Personalización proporciona botones a la derecha de los campos de entrada de argumento y directorio para acceder a los menús IDR_MENU_ARGS y IDR_MENU_DIRS. Cuando un usuario selecciona un comando de uno de estos menús, el marco anexa la cadena, cuyo identificador de recurso es igual al identificador de comando, al cuadro de texto adecuado.

Inclusión de herramientas predefinidas

Si desea predefinir algunas herramientas en el inicio de la aplicación, debe invalidar el método CFrameWnd::LoadFrame de la ventana principal de la aplicación. Para ese método, siga los pasos a continuación.

Para agregar nuevas herramientas en LoadFrame
  1. Obtenga un puntero al objeto CUserToolsManager Class mediante una llamada a CWinAppEx::GetUserToolsManager.

  2. Para cada herramienta que quiera crear, llame a CUserToolsManager::CreateNewTool. Este método devuelve un puntero a un objeto CUserTool Class y agrega la herramienta de usuario recién creada a la colección interna de herramientas. Si ha proporcionado la información de runtime de una clase derivada de CUserTool Class como cuarto parámetro de CWinAppEx::EnableUserTools, CUserToolsManager::CreateNewTool creará y devolverá una instancia de esa clase en su lugar.

  3. Para cada herramienta, establezca su etiqueta de texto mediante CUserTool::m_strLabel y establezca su comando con una llamada a CUserTool::SetCommand. La implementación predeterminada de CUserTool Class recupera automáticamente los iconos disponibles del programa especificado en la llamada a SetCommand.

Consulte también

Personalización de MFC
CUserTool (clase)
CUserToolsManager (clase)
CWinAppEx (clase)