Compartir a través de


TN022: Implementación de comandos estándar

Nota:

La nota técnica siguiente no se ha actualizado desde que se incluyó por primera vez en la documentación en línea. Como resultado, algunos procedimientos y temas podrían estar obsoletos o ser incorrectos. Para obtener información más reciente, se recomienda buscar el tema de interés en el índice de la documentación en línea.

En esta nota, se describen las implementaciones de comandos estándar proporcionadas por MFC 2.0. Lea primero la Nota técnica 21, ya que describe los mecanismos usados para implementar muchos de los comandos estándar.

En esta descripción, se supone que conoce las arquitecturas, las API y la práctica de programación común de MFC. Se describen las API "solo de implementación" documentadas y no documentadas. Este no es un lugar para empezar a aprender sobre las características o cómo programar en MFC. Consulte Visual C++ para obtener más información general y más detalles sobre las API documentadas.

El problema

MFC define muchos identificadores de comandos estándar en el archivo de encabezado AFXRES.H. La compatibilidad del marco con estos comandos varía. Comprender dónde y cómo controlan las clases de marco estos comandos no solo le mostrará cómo funciona internamente el marco, sino que proporcionará información útil sobre cómo personalizar las implementaciones estándar y le enseñará algunas técnicas para implementar sus propios manipuladores de comandos.

Contenido de esta nota técnica

Cada identificador de comando se describe en dos secciones:

  • Título: nombre simbólico del identificador de comando (por ejemplo, ID_FILE_SAVE) seguido del propósito del comando (por ejemplo, "guarda el documento actual") separado por un símbolo de dos puntos.

  • Uno o varios párrafos que describen qué clases implementan el comando y qué hace la implementación predeterminada

La mayoría de las implementaciones predeterminadas de comandos están conectadas previamente en el mapa de mensajes de clase base del marco. Hay algunas implementaciones de comandos que requieren una conexión explícita en la clase derivada. Se describen en "Nota". Si elige las opciones adecuadas en AppWizard, estos manipuladores predeterminados se conectarán automáticamente en la aplicación maestra generada.

Convención de nomenclatura

Los comandos estándar siguen una convención de nomenclatura sencilla que se recomienda usar si es posible. La mayoría de los comandos estándar se encuentran en lugares estándar de la barra de menús de una aplicación. El nombre simbólico del comando comienza por "ID_" seguido del nombre del menú emergente estándar, seguido del nombre del elemento de menú. El nombre simbólico está en mayúsculas con caracteres de subrayado para separar las palabras. Para los comandos que no tienen nombres de elemento de menú estándar, se define un nombre de comando lógico que comienza por "ID_" (por ejemplo, ID_NEXT_PANE).

Usamos el prefijo "ID_" para indicar comandos diseñados para enlazarse a elementos de menú, botones de la barra de herramientas u otros objetos de la interfaz de usuario de comandos. Los controladores de comandos que controlan los comandos "ID_" deben usar los mecanismos de ON_COMMAND y ON_UPDATE_COMMAND_UI de la arquitectura de comandos de MFC.

Se recomienda usar el prefijo estándar "IDM_" para los elementos de menú que no siguen la arquitectura de comandos y necesitan código específico del menú para habilitarlos y deshabilitarlos. Por supuesto, el número de comandos específicos del menú debe ser pequeño, ya que seguir la arquitectura de comandos de MFC no solo hace que los manipuladores de comandos sean más eficaces (ya que funcionarán con las barras de herramientas), sino que hace que el código del manipulador de comandos sea reutilizable.

Intervalos de identificadores

Consulte la Nota técnica 20 para obtener más detalles sobre el uso de intervalos de identificadores en MFC.

Los comandos estándar de MFC se encuentran en el intervalo 0xE000 a 0xEFFF. No dependa de los valores específicos de estos identificadores, ya que están sujetos a cambios en versiones futuras de la biblioteca.

La aplicación debe definir sus comandos en el intervalo 0x8000 a 0xDFFF.

Identificadores de comandos estándar

Para cada identificador de comando, hay una cadena de símbolo de la línea de mensajes estándar que se puede encontrar en el archivo PROMPTS.RC. El identificador de cadena de ese símbolo del menú debe ser el mismo que para el identificador de comando.

  • ID_FILE_NEW Crea un documento nuevo o vacío.

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    CWinApp::OnFileNew implementa este comando de forma diferente en función del número de plantillas de documento de la aplicación. Si solo hay un elemento CDocTemplate, CWinApp::OnFileNew creará un nuevo documento de ese tipo, así como la clase de marco y de vista adecuadas.

    Si hay más de un elemento CDocTemplate, CWinApp::OnFileNew solicitará al usuario un cuadro de diálogo (AFX_IDD_NEWTYPEDLG) que le permitirá seleccionar el tipo de documento que se va a usar. Se usa el elemento CDocTemplate seleccionado para crear el documento.

    Una personalización común de ID_FILE_NEW es proporcionar una elección diferente y más gráfica de los tipos de documento. En este caso, puede implementar su propio elemento CMyApp::OnFileNew y colocarlo en el mapa de mensajes en lugar de CWinApp::OnFileNew. No es necesario llamar a la implementación de la clase base.

    Otra personalización común de ID_FILE_NEW es proporcionar un comando independiente para crear un documento de cada tipo. En este caso, debe definir nuevos identificadores de comando; por ejemplo, ID_FILE_NEW_CHART y ID_FILE_NEW_SHEET.

  • ID_FILE_OPEN Abre un documento existente.

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    CWinApp::OnFileOpen tiene una implementación muy sencilla para llamar a CWinApp::DoPromptFileName seguido de CWinApp::OpenDocumentFile con el nombre de archivo o la ruta de acceso del archivo que se va a abrir. La rutina de implementación DoPromptFileName de CWinApp abre el cuadro de diálogo estándar FileOpen y lo rellena con las extensiones de archivo obtenidas de las plantillas de documento actuales.

    Una personalización común de ID_FILE_OPEN es personalizar el cuadro de diálogo FileOpen o agregar filtros de archivo adicionales. La manera recomendada de personalizar esto es reemplazar la implementación predeterminada por su propio cuadro de diálogo FileOpen y llamar a CWinApp::OpenDocumentFile con el nombre del archivo o la ruta de acceso del documento. No es necesario llamar a la clase base.

  • ID_FILE_CLOSE Cierra el documento abierto actualmente.

    CDocument::OnFileClose llama a CDocument::SaveModified para pedir al usuario que guarde el documento si se ha modificado y, a continuación, llama a OnCloseDocument. Toda la lógica de cierre, incluida la destrucción del documento, se realiza en la rutina OnCloseDocument.

    Nota:

    ID_FILE_CLOSE actúa de forma diferente desde un mensaje WM_CLOSE o desde un comando del sistema SC_CLOSE enviado a la ventana del marco de documentos. Cerrar una ventana cerrará el documento solo si es la última ventana del marco que muestra el documento. Cerrar el documento con ID_FILE_CLOSE no solo cerrará el documento, sino que cerrará todas las ventanas de marco que muestren el documento.

  • ID_FILE_SAVE Guarda el documento actual.

    La implementación usa la rutina auxiliar CDocument::DoSave que se usa para OnFileSave y OnFileSaveAs. Si guarda un documento que no se ha guardado antes (es decir, no tiene un nombre de ruta de acceso, como en el caso de FileNew) o que se leyó desde un documento de solo lectura, la lógica de OnFileSave actuará como el comando ID_FILE_SAVE_AS y pedirá al usuario que proporcione un nuevo nombre de archivo. El proceso real de abrir el archivo y realizar el guardado se lleva a cabo mediante la función virtual OnSaveDocument.

    Hay dos motivos comunes para personalizar ID_FILE_SAVE. En el caso de los documentos que no se guardan, simplemente quite los elementos de menú y los botones de la barra de herramientas de ID_FILE_SAVE de la interfaz de usuario. Asegúrese también de que nunca se modifique el documento (es decir, que no se llama nunca a CDocument::SetModifiedFlag) y el marco nunca hará que el documento se guarde. Para los documentos que se guardan en algún lugar distinto a un archivo de disco, defina un nuevo comando para esa operación.

    En el caso de COleServerDoc, ID_FILE_SAVE se usa tanto para guardar archivos (para documentos normales) como para la actualización de archivos (para documentos insertados).

    Si los datos del documento se almacenan en archivos de disco individuales, pero no desea usar la implementación de serialización predeterminada CDocument, debe reemplazar CDocument::OnSaveDocument en lugar de OnFileSave.

  • ID_FILE_SAVE_AS Guarda el documento actual con un nombre de archivo diferente.

    La implementación de CDocument::OnFileSaveAs usa la misma rutina auxiliar CDocument::DoSave que OnFileSave. El comando OnFileSaveAs se controla igual que ID_FILE_SAVE si los documentos no tenían ningún nombre de archivo antes de guardar. COleServerDoc::OnFileSaveAs implementa la lógica para guardar un archivo de datos de documento normal o para guardar un documento de servidor que representa un objeto OLE insertado en alguna otra aplicación como un archivo independiente.

    Si personaliza la lógica de ID_FILE_SAVE, es posible que quiera personalizar ID_FILE_SAVE_AS de forma similar o que la operación "Guardar como" no se aplique al documento. Puede quitar el elemento de menú de la barra de menús si no es necesario.

  • ID_FILE_SAVE_COPY_AS Guarda una copia del documento actual con un nuevo nombre.

    La implementación de COleServerDoc::OnFileSaveCopyAs es muy similar a CDocument::OnFileSaveAs, salvo que el objeto de documento no se "adjunta" al archivo subyacente después de guardar. Es decir, si el documento en memoria se "modificó" antes de guardar, se sigue considerando "modificado". Además, este comando no tiene ningún efecto en el nombre de la ruta de acceso ni el título almacenados en el documento.

  • ID_FILE_UPDATE Notifica al contenedor que guarde un documento insertado.

    La implementación de COleServerDoc::OnUpdateDocument simplemente notifica al contenedor que se debe guardar la inserción. A continuación, el contenedor llama a las API OLE adecuadas para guardar el objeto insertado.

  • ID_FILE_PAGE_SETUP Invoca un cuadro de diálogo de configuración o diseño de página específico de la aplicación.

    Actualmente, no hay ningún estándar para este cuadro de diálogo y el marco no tiene ninguna implementación predeterminada de este comando.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_FILE_PRINT_SETUP Invoca al cuadro de diálogo de configuración de impresión estándar.

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    Este comando invoca al cuadro de diálogo de configuración de impresión estándar, que permite al usuario personalizar la impresora y la configuración de impresión para al menos este documento o, como máximo, todos los documentos de esta aplicación. Debe usar el Panel de control para cambiar la configuración predeterminada de la impresora para todo el sistema.

    CWinApp::OnFilePrintSetup tiene una implementación muy sencilla que crea un objeto CPrintDialog y llama a la función de implementación CWinApp::DoPrintDialog. Esto establece la configuración predeterminada de impresora de la aplicación.

    La necesidad común de personalizar este comando es permitir la configuración de impresora por cada documento, que se debe almacenar con el documento cuando se guarda. Para ello, debe agregar un manipulador de mapa de mensajes en la clase CDocument que cree un objeto CPrintDialog, lo inicialice con los atributos de impresora adecuados (normalmente hDevMode y hDevNames), llame a CPrintDialog::DoModal y guarde la configuración de impresora modificada. Para una implementación sólida, debe examinar la implementación de CWinApp::DoPrintDialog para detectar errores y de CWinApp::UpdatePrinterSelection para tratar los valores predeterminados sensibles y el seguimiento de los cambios de impresora en todo el sistema.

  • ID_FILE_PRINT Impresión estándar del documento actual

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CView para habilitar esta funcionalidad.

    Este comando imprime el documento actual, o más correctamente, inicia el proceso de impresión, lo que implica invocar el cuadro de diálogo de impresión estándar y ejecutar el motor de impresión.

    CView::OnFilePrint implementa este comando y el bucle de impresión principal. Llama al elemento virtual CView::OnPreparePrinting para mostrar al usuario el cuadro de diálogo de impresión. A continuación, prepara el DC de salida para ir a la impresora, abre el cuadro de diálogo de progreso de impresión (AFX_IDD_PRINTDLG) y envía el valor de escape StartDoc a la impresora. CView::OnFilePrint también contiene el bucle de impresión orientado a páginas principal. Para cada página, llama al elemento virtual CView::OnPrepareDC seguido de un valor de escape StartPage y llama al elemento virtual CView::OnPrint de esa página. Cuando finaliza, se llama al elemento virtual CView::OnEndPrinting y se cierra el cuadro de diálogo de progreso de impresión.

    La arquitectura de impresión de MFC está diseñada para enlazarse de muchas maneras diferentes para la impresión y la vista previa de impresión. Normalmente, encontrará las distintas funciones reemplazables CView adecuadas para cualquier tarea de impresión orientada a páginas. Solo debe encontrarse con la necesidad de reemplazar la implementación de ID_FILE_PRINT en el caso de una aplicación que usa la impresora para una salida no orientada a páginas.

  • ID_FILE_PRINT_PREVIEW Entra en el modo de vista previa de impresión del documento actual.

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CView para habilitar esta funcionalidad.

    CView::OnFilePrintPreview inicia el modo de vista previa de impresión llamando a la función auxiliar CView::DoPrintPreview documentada. CView::DoPrintPreview es el motor principal del bucle de vista previa de impresión, al igual que OnFilePrint es el motor principal del bucle de impresión.

    La operación de vista previa de impresión se puede personalizar de varias maneras pasando parámetros diferentes a DoPrintPreview. Consulte la Nota técnica 30, que describe algunos de los detalles de la vista previa de impresión y cómo personalizarla.

  • ID_FILE_MRU_FILE1... FILE16 Intervalo de identificadores de comandos para la lista de MRU de archivos.

    CWinApp::OnUpdateRecentFileMenu es un manipulador de interfaz de usuario del comando de actualización y es uno de los usos más avanzados del mecanismo de ON_UPDATE_COMMAND_UI. En el recurso de menú, solo tiene que definir un elemento de menú único con el identificador ID_FILE_MRU_FILE1. Ese elemento de menú permanece deshabilitado inicialmente.

    A medida que crece la lista de MRU, se agregan más elementos de menú a la lista. La implementación estándar de CWinApp tiene como valor predeterminado el límite estándar de los cuatro archivos usados más recientemente. Puede cambiar el valor predeterminado llamando a CWinApp::LoadStdProfileSettings con un valor mayor o menor. La lista de MRU se almacena en el archivo .INI de la aplicación. La lista se carga en la función InitInstance de la aplicación si llama a LoadStdProfileSettings y se guarda cuando se cierra la aplicación. El manipulador de interfaz de usuario del comando de actualización de MRU también convertirá rutas de acceso absolutas en rutas de acceso relativas para su visualización en el menú Archivo.

    CWinApp::OnOpenRecentFile es el manipulador de ON_COMMAND que lleva a cabo el comando real. Simplemente obtiene el nombre de archivo de la lista de MRU y llama a CWinApp::OpenDocumentFile, que realiza todo el trabajo de abrir el archivo y actualizar la lista de MRU.

    No se recomienda personalizar este manipulador de comandos.

  • ID_EDIT_CLEAR Borra la selección actual

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando mediante CEdit::Clear. El comando está deshabilitado si no hay ninguna selección actual.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_CLEAR_ALL Borra todo el documento.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    Si decide implementar este comando, se recomienda usar este identificador de comando. Consulte el ejemplo del tutorial de MFC SCRIBBLE para ver una implementación de ejemplo.

  • ID_EDIT_COPY Copia la selección actual en el Portapapeles.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando que copia el texto seleccionado actualmente en el Portapapeles como CF_TEXT mediante CEdit::Copy. El comando está deshabilitado si no hay ninguna selección actual.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_CUT Corta la selección actual en el Portapapeles.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando que corta el texto seleccionado actualmente en el Portapapeles como CF_TEXT mediante CEdit::Cut. El comando está deshabilitado si no hay ninguna selección actual.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_FIND Comienza la operación de búsqueda, abre el cuadro de diálogo de búsqueda sin modo.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando, que llama a la función auxiliar de implementación OnEditFindReplace para usar y almacenar la configuración de buscar y reemplazar anterior en variables de implementación privadas. La clase CFindReplaceDialog se usa para administrar el cuadro de diálogo sin modo que se va a mostrar al usuario.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_PASTE Inserta el contenido actual del Portapapeles.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando que copia los datos actuales del Portapapeles reemplazando el texto seleccionado mediante CEdit::Paste. El comando está deshabilitado si no hay CF_TEXT en el Portapapeles.

    COleClientDoc solo proporciona un manipulador de interfaz de usuario de comando de actualización para este comando. Si el Portapapeles no contiene un elemento u objeto OLE insertable, el comando estará deshabilitado. Es responsable de escribir el manipulador para que el comando real lleve a cabo el pegado real. Si la aplicación OLE también puede pegar otros formatos, debe proporcionar su propio manipulador de interfaz de usuario de comando de actualización en la vista o el documento (es decir, en algún lugar antes de COleClientDoc en el enrutamiento de destino del comando).

    Si decide implementar este comando, se recomienda usar este identificador de comando.

    Para reemplazar la implementación OLE estándar, use COleClientItem::CanPaste.

  • ID_EDIT_PASTE_LINK Inserta un vínculo a partir del contenido actual del Portapapeles.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    COleDocument solo proporciona un manipulador de interfaz de usuario de comando de actualización para este comando. Si el Portapapeles no contiene un elemento u objeto OLE para el que se pueda crear un vínculo, el comando estará deshabilitado. Es responsable de escribir el manipulador para que el comando real lleve a cabo el pegado real. Si la aplicación OLE también puede pegar otros formatos, debe proporcionar su propio manipulador de interfaz de usuario de comando de actualización en la vista o el documento (es decir, en algún lugar antes de COleDocument en el enrutamiento de destino del comando).

    Si decide implementar este comando, se recomienda usar este identificador de comando.

    Para reemplazar la implementación OLE estándar, use COleClientItem::CanPasteLink.

  • ID_EDIT_PASTE_SPECIAL Inserta el contenido actual del Portapapeles con opciones.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView. MFC no proporciona este cuadro de diálogo.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_REPEAT Repite la última operación.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando para repetir la última operación de búsqueda. Se usan las variables de implementación privadas de la última búsqueda. El comando está deshabilitado si no se puede intentar una búsqueda.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_REPLACE Comienza la operación de sustitución, muestra el cuadro de diálogo Reemplazar sin modo.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando, que llama a la función auxiliar de implementación OnEditFindReplace para usar y almacenar la configuración de buscar y reemplazar anterior en variables de implementación privadas. La clase CFindReplaceDialog se usa para administrar el cuadro de diálogo sin modo que se va a mostrar al usuario.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_SELECT_ALL Selecciona todo el documento.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando, que selecciona todo el texto del documento. El comando está deshabilitado si no hay texto que seleccionar.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_UNDO Deshace la última operación.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    CEditView proporciona una implementación de este comando mediante CEdit::Undo. El comando está deshabilitado si CEdit::CanUndo devuelve FALSE.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_EDIT_REDO Rehace la última operación.

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementarlo para cada clase derivada de CView.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_WINDOW_NEW Abre otra ventana del documento activo.

    CMDIFrameWnd::OnWindowNew implementa esta eficaz característica mediante el uso de la plantilla de documento del documento actual para crear otro marco que contenga otra vista del documento actual.

    Al igual que la mayoría de los comandos de menú de la ventana de la interfaz de múltiples documentos (MDI), el comando está deshabilitado si no hay ninguna ventana MDI secundaria activa.

    No se recomienda personalizar este manipulador de comandos. Si desea proporcionar un comando que cree vistas adicionales o ventanas de marco, probablemente será mejor inventar su propio comando. Puede clonar el código de CMDIFrameWnd::OnWindowNew y modificarlo para las clases de marco y vista específicas de su elección.

  • ID_WINDOW_ARRANGE Organiza los iconos de la parte inferior de una ventana MDI.

    CMDIFrameWnd implementa este comando MDI estándar en la función auxiliar de implementación OnMDIWindowCmd. Este asistente asigna identificadores de comando a mensajes de ventanas MDI y, por tanto, puede compartir una gran cantidad de código.

    Al igual que la mayoría de los comandos de menú de ventana MDI, el comando está deshabilitado si no hay ninguna ventana secundaria MDI activa.

    No se recomienda personalizar este manipulador de comandos.

  • ID_WINDOW_CASCADE Muestra en cascada las ventanas para que se superpongan.

    CMDIFrameWnd implementa este comando MDI estándar en la función auxiliar de implementación OnMDIWindowCmd. Este asistente asigna identificadores de comando a mensajes de ventanas MDI y, por tanto, puede compartir una gran cantidad de código.

    Al igual que la mayoría de los comandos de menú de ventana MDI, el comando está deshabilitado si no hay ninguna ventana secundaria MDI activa.

    No se recomienda personalizar este manipulador de comandos.

  • ID_WINDOW_TILE_HORZ Coloca en mosaico las ventanas horizontalmente.

    Este comando se implementa en CMDIFrameWnd igual que ID_WINDOW_CASCADE, salvo que se usa un mensaje de ventanas MDI diferente para la operación.

    Debe elegir la orientación de mosaico predeterminada para la aplicación. Para ello, cambie el identificador del elemento de menú "Tile" (Colocar en mosaico) de la ventana a ID_WINDOW_TILE_HORZ o ID_WINDOW_TILE_VERT.

  • ID_WINDOW_TILE_VERT Coloca en mosaico las ventanas verticalmente.

    Este comando se implementa en CMDIFrameWnd igual que ID_WINDOW_CASCADE, salvo que se usa un mensaje de ventanas MDI diferente para la operación.

    Debe elegir la orientación de mosaico predeterminada para la aplicación. Para ello, cambie el identificador del elemento de menú "Tile" (Colocar en mosaico) de la ventana a ID_WINDOW_TILE_HORZ o ID_WINDOW_TILE_VERT.

  • ID_WINDOW_SPLIT Interfaz de teclado para el separador.

    CView controla este comando para la implementación de CSplitterWnd. Si la vista forma parte de una ventana separadora, este comando delegará en la función de implementación CSplitterWnd::DoKeyboardSplit. Esto colocará el separador en un modo que permitirá que los usuarios del teclado dividan o anulen la división de una ventana separadora.

    Este comando está deshabilitado si la vista no está en un separador.

    No se recomienda personalizar este manipulador de comandos.

  • ID_APP_ABOUT Invoca el cuadro de diálogo Acerca de.

    No hay ninguna implementación estándar para el cuadro "Acerca de" de una aplicación. La aplicación predeterminada creada por AppWizard creará una clase de cuadro de diálogo personalizada para la aplicación y la usará como el cuadro Acerca de. AppWizard también escribirá un manipulador de comandos trivial que controla este comando e invoca el cuadro de diálogo.

    Casi siempre implementará este comando.

  • ID_APP_EXIT Salir de la aplicación.

    CWinApp::OnAppExit controla este comando mediante el envío de un mensaje WM_CLOSE a la ventana principal de la aplicación. La implementación de CFrameWnd controla el apagado estándar de la aplicación (que realiza solicitudes sobre los archivos modificados, etc.).

    No se recomienda personalizar este manipulador de comandos. Se recomienda reemplazar la lógica de cierre de CWinApp::SaveAllModified o CFrameWnd.

    Si decide implementar este comando, se recomienda usar este identificador de comando.

  • ID_HELP_INDEX Enumera los temas de ayuda de un archivo .HLP.

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    CWinApp::OnHelpIndex controla este comando mediante una llamada trivial a CWinApp::WinHelp.

    No se recomienda personalizar este manipulador de comandos.

  • ID_HELP_USING Muestra ayuda sobre cómo usar la Ayuda.

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    CWinApp::OnHelpUsing controla este comando mediante una llamada trivial a CWinApp::WinHelp.

    No se recomienda personalizar este manipulador de comandos.

  • ID_CONTEXT_HELP Entra en el modo de ayuda de MAYÚS-F1.

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    CWinApp::OnContextHelp controla este comando estableciendo el cursor del modo de ayuda, escribiendo un bucle modal y esperando a que el usuario seleccione una ventana sobre la que obtener ayuda. Consulte la Nota técnica 28 para obtener más detalles sobre la implementación de la Ayuda de MFC.

    No se recomienda personalizar este manipulador de comandos.

  • ID_HELP Proporciona ayuda sobre el contexto actual

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    CWinApp::OnHelp controla este comando obteniendo el contexto de ayuda adecuado para el contexto de aplicación actual. Esto controla la ayuda de F1 simple, ayuda sobre los cuadros de mensaje, etc. Consulte la Nota técnica 28 para obtener más detalles sobre la implementación de la Ayuda de MFC.

    No se recomienda personalizar este manipulador de comandos.

  • ID_DEFAULT_HELP Muestra la ayuda predeterminada para el contexto

    Nota:

    Debe conectarlo al mapa de mensajes de la clase derivada de CWinApp para habilitar esta funcionalidad.

    Este comando normalmente se asigna a CWinApp::OnHelpIndex.

    Se puede proporcionar otro controlador de comandos si se desea una distinción entre la Ayuda predeterminada y el índice de ayuda.

  • ID_NEXT_PANE Ir al panel siguiente

    CView controla este comando para la implementación de CSplitterWnd. Si la vista forma parte de una ventana separadora, este comando delegará en la función de implementación CSplitterWnd::OnNextPaneCmd. Esto moverá la vista activa al siguiente panel del separador.

    Este comando está deshabilitado si la vista no está en un separador o no hay ningún panel siguiente al que ir.

    No se recomienda personalizar este manipulador de comandos.

  • ID_PREV_PANE Ir al panel anterior

    CView controla este comando para la implementación de CSplitterWnd. Si la vista forma parte de una ventana separadora, este comando delegará en la función de implementación CSplitterWnd::OnNextPaneCmd. Esto moverá la vista activa al panel anterior del separador.

    Este comando está deshabilitado si la vista no está en un separador o no hay ningún panel anterior al que ir.

    No se recomienda personalizar este manipulador de comandos.

  • ID_OLE_INSERT_NEW Inserta un nuevo objeto OLE

    Actualmente, no hay ninguna implementación estándar para este comando. Debe implementar esto para la clase derivada de CView para insertar un nuevo elemento u objeto OLE en la selección actual.

    Todas las aplicaciones cliente OLE deben implementar este comando. AppWizard, con la opción OLE, creará una implementación maestra de OnInsertObject en la clase de vista que tendrá que completar.

    Consulte el ejemplo de OLE de MFC OCLIENT para ver una implementación completa de este comando.

  • ID_OLE_EDIT_LINKS Edita vínculos OLE

    COleDocument controla este comando mediante la implementación proporcionada por MFC del cuadro de diálogo de vínculos OLE estándar. Se tiene acceso a la implementación de este cuadro de diálogo mediante la clase COleLinksDialog. Si el documento actual no contiene vínculos, el comando está deshabilitado.

    No se recomienda personalizar este manipulador de comandos.

  • ID_OLE_VERB_FIRST...LAST Intervalo de identificadores de los verbos OLE

    COleDocument usa este intervalo de identificadores de comandos para los verbos admitidos por el elemento u objeto OLE seleccionado actualmente. Debe ser un intervalo, ya que un tipo de objeto o elemento OLE determinado puede admitir cero o más verbos personalizados. En el menú de la aplicación, debe tener un elemento de menú con el identificador de ID_OLE_VERB_FIRST. Cuando se ejecuta el programa, el menú se actualizará con la descripción del verbo de menú adecuada (o menú emergente con muchos verbos). La administración del menú OLE se controla mediante AfxOleSetEditMenu y se realiza en el manipulador de interfaz de usuario de comando de actualización de este comando.

    No hay manipuladores de comandos explícitos para controlar cada uno de los identificadores de comando de este intervalo. Se reemplaza COleDocument::OnCmdMsg para interceptar todos los identificadores de comando de este intervalo, convertirlos en números de verbo con base cero e iniciar el servidor para ese verbo (mediante COleClientItem::DoVerb).

    No se recomienda la personalización ni otro uso de este intervalo de identificadores de comando.

  • ID_VIEW_TOOLBAR Activa y desactiva la barra de herramientas

    CFrameWnd controla este comando y el manipulador de interfaz de usuario de comando de actualización para alternar el estado de visibilidad de la barra de herramientas. La barra de herramientas debe ser una ventana secundaria del marco con el identificador de ventana secundario de AFX_IDW_TOOLBAR. El manipulador del comando activa o desactiva realmente la visibilidad de la ventana de la barra de herramientas. CFrameWnd::RecalcLayout se usa para volver a dibujar la ventana del marco con la barra de herramientas en su nuevo estado. El manipulador de interfaz de usuario de comando de actualización comprueba el elemento de menú cuando la barra de herramientas está visible.

    No se recomienda personalizar este manipulador de comandos. Si desea agregar barras de herramientas adicionales, querrá clonar y modificar el manipulador de comando y el manipulador de interfaz de usuario de comando de actualización de este comando.

  • ID_VIEW_STATUS_BAR Activa y desactiva la barra de estado

    Este comando se implementa en CFrameWnd igual que ID_VIEW_TOOLBAR, salvo que se usa un identificador de ventana secundario diferente (AFX_IDW_STATUS_BAR).

Manipuladores de comando de solo actualización

Se usan varios identificadores de comando estándar como indicadores en las barras de estado. Usan el mismo mecanismo de control de la interfaz de usuario de comando de actualización para mostrar su estado visual actual durante el tiempo de inactividad de la aplicación. Puesto que el usuario no puede seleccionarlos (es decir, no se puede insertar un panel de barra de estado), no tiene sentido tener un manipulador de ON_COMMAND para estos identificadores de comando.

  • ID_INDICATOR_CAPS: indicador de bloqueo de mayúsculas (CAP).

  • ID_INDICATOR_NUM: indicador de bloqueo de teclado numérico (NUM).

  • ID_INDICATOR_SCRL: indicador de bloqueo de desplazamiento (SCRL).

  • ID_INDICATOR_KANA: indicador de bloqueo KANA (aplicable solo a sistemas japoneses).

Los tres se implementan en CFrameWnd::OnUpdateKeyIndicator, un asistente de implementación que usa el identificador de comando para asignarlo a la tecla virtual adecuada. Una implementación común habilita o deshabilita (para los paneles de estado deshabilitados = sin texto) el objeto CCmdUI en función de si la tecla virtual adecuada está bloqueada actualmente.

No se recomienda personalizar este manipulador de comandos.

  • ID_INDICATOR_EXT: indicador de selección extendida (EXT).

  • ID_INDICATOR_OVR: indicador de sobreimpresion (OVR).

  • ID_INDICATOR_REC: indicador de grabación (REC).

Actualmente, no hay ninguna implementación estándar para estos indicadores.

Si decide implementar estos indicadores, le recomendamos que use estos identificadores de indicador y mantenga el orden de los indicadores en la barra de estado (es decir, en este orden: EXT, CAP, NUM, SCRL, OVR, REC).

Consulte también

Notas técnicas por número
Notas técnicas por categoría