TN022: implementação de comandos padrão

Observação

A nota técnica a seguir não foi atualizada desde que foi incluída pela primeira vez na documentação online. Como resultado, alguns procedimentos e tópicos podem estar desatualizados ou incorretos. Para obter as informações mais recentes, é recomendável que você pesquise o tópico de interesse no índice de documentação online.

Esta observação descreve as implementações de comando padrão fornecidas pelo MFC 2.0. Leia a Nota Técnica 21 primeiro porque descreve os mecanismos usados para implementar muitos dos comandos padrão.

Essa descrição pressupõe conhecimento das arquiteturas do MFC, APIs e prática de programação comuns. As APIs documentadas, bem como "somente implementação" não documentadas, são descritas. Este não é um lugar para começar a aprender sobre os recursos ou como programar no MFC. Consulte o Visual C++ para obter informações mais gerais e para obter detalhes das APIs documentadas.

O problema

O MFC define muitas IDs de comando padrão no arquivo de cabeçalho AFXRES.H. O suporte à estrutura para esses comandos varia. O entendimento de onde e como as classes de estrutura identificam esses comandos não só mostrará como a estrutura funciona internamente, mas fornecerá informações úteis sobre como personalizar as implementações padrão e ensinar algumas técnicas para implementar seus próprios manipuladores de comando.

Conteúdo desta Nota Técnica

Cada ID de comando é descrita em duas seções:

  • O título: o nome simbólico da ID de comando (por exemplo, ID_FILE_SAVE) seguido pela finalidade do comando (por exemplo, "salva o documento atual") separado por dois-pontos.

  • Um ou mais parágrafos que descrevem quais classes implementam o comando e o que a implementação padrão faz

A maioria das implementações de comando padrão é pré-conectada no mapa de mensagens de classe base da estrutura. Há algumas implementações de comando que exigem a conexão explícita em sua classe derivada. Eles são descritos em "Nota". Se você escolher as opções corretas no AppWizard, esses manipuladores padrão serão conectados no aplicativo esqueleto gerado.

Convenção de nomenclatura

Os comandos padrão seguem uma convenção de nomenclatura simples que recomendamos que você use, se possível. A maioria dos comandos padrão está localizada em locais padrão na barra de menus de um aplicativo. O nome simbólico do comando começa com "ID_" seguido pelo nome do menu pop-up padrão, seguido pelo nome do item de menu. O nome simbólico está em maiúsculas com quebra de palavras sublinhadas. Para comandos que não têm nomes de item de menu padrão, um nome de comando lógico é definido começando com "ID_" (por exemplo, ID_NEXT_PANE).

Usamos o prefixo "ID_" para indicar comandos projetados para serem associados a itens de menu, botões de barra de ferramentas ou outros objetos da interface do usuário de comando. Os manipuladores de comando que identificam comandos "ID_" devem usar os mecanismos ON_COMMAND e ON_UPDATE_COMMAND_UI da arquitetura de comandos do MFC.

Recomendamos que você use o prefixo padrão "IDM_" para itens de menu que não seguem a arquitetura de comandos e precisam de código específico do menu para habilitá-los e desabilitá-los. É claro que o número de comandos específicos do menu deve ser pequeno, pois seguir a arquitetura de comandos do MFC não só torna os manipuladores de comando mais poderosos (já que eles funcionarão com barras de ferramentas), mas tornam o código do manipulador de comando reutilizável.

Intervalos de ID

Consulte a Nota Técnica 20 para obter mais detalhes sobre o uso de intervalos de ID no MFC.

Os comandos padrão do MFC se enquadram no intervalo de 0xE000 a 0xEFFF. Não confie nos valores específicos dessas IDs, pois elas estão sujeitas a alterações em versões futuras da biblioteca.

Seu aplicativo deve definir os comandos no intervalo de 0x8000 a 0xDFFF.

IDs de comandos padrão

Para cada ID de comando, há uma cadeia de caracteres de prompt de linha de mensagem padrão que pode ser encontrada no arquivo PROMPTS.RC. A ID da cadeia de caracteres para esse prompt de menu deve ser a mesma da ID de comando.

  • ID_FILE_NEW Cria um documento novo/vazio.

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    CWinApp::OnFileNew implementa esse comando de forma diferente, dependendo do número de modelos de documento no aplicativo. Se houver apenas um CDocTemplate, CWinApp::OnFileNew criará um novo documento desse tipo, bem como a classe de quadro e exibição adequada.

    Se houver mais de um CDocTemplate, CWinApp::OnFileNew solicitará ao usuário um diálogo (AFX_IDD_NEWTYPEDLG) permitindo que ele selecione qual tipo de documento deve ser usado. O CDocTemplate selecionado é usado para criar o documento.

    Uma personalização comum de ID_FILE_NEW é fornecer uma escolha diferente e mais gráfica dos tipos de documento. Nesse caso, você pode implementar seu próprio CMyApp::OnFileNew e colocá-lo em seu mapa de mensagens em vez de CWinApp::OnFileNew. Não é necessário chamar a implementação da classe base.

    Outra personalização comum de ID_FILE_NEW é fornecer um comando separado para criação de um documento de cada tipo. Nesse caso, você deve definir as novas IDs de comando, por exemplo, ID_FILE_NEW_CHART e ID_FILE_NEW_SHEET.

  • ID_FILE_OPEN Abre um documento existente.

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    CWinApp::OnFileOpen tem uma implementação muito simples de chamada CWinApp::DoPromptFileName seguida por CWinApp::OpenDocumentFile com o nome do arquivo ou caminho do arquivo a ser aberto. A rotina de implementação CWinAppDoPromptFileName abre o diálogo FileOpen padrão e o preenche com as extensões de arquivo obtidas dos modelos de documento atuais.

    Uma personalização comum de ID_FILE_OPEN é personalizar o diálogo FileOpen ou adicionar filtros de arquivo adicionais. É recomendável personalizar isso substituindo a implementação padrão por seu próprio diálogo FileOpen e chamando CWinApp::OpenDocumentFile com o nome do arquivo ou caminho do documento. Não é necessário chamar a classe base.

  • ID_FILE_CLOSE Fecha o documento aberto no momento.

    CDocument::OnFileClose chama CDocument::SaveModified para solicitar que o usuário salve o documento se ele tiver sido modificado e, em seguida, chama OnCloseDocument. Toda a lógica de fechamento, incluindo a destruição do documento, é feita na rotina OnCloseDocument.

    Observação

    ID_FILE_CLOSE atua de forma diferente de uma mensagem WM_CLOSE ou de um comando do sistema de SC_CLOSE enviado para a janela com moldura dos documentos. O fechamento de uma janela fechará o documento somente se essa for a última janela com moldura exibindo o documento. O fechamento documento com ID_FILE_CLOSE não fechará apenas o documento, mas todas as janelas com moldura exibindo o documento.

  • ID_FILE_SAVE Salva o documento atual.

    A implementação usa uma rotina auxiliar CDocument::DoSave que é usada para OnFileSave e OnFileSaveAs. Se você salvar um documento que não foi salvo antes (ou seja, ele não tem um nome de caminho, como no caso do FileNew) ou que foi lido de um documento somente leitura, a lógica OnFileSave agirá como o comando ID_FILE_SAVE_AS e solicitará que o usuário forneça um novo nome de arquivo. O processo real de abertura do arquivo e salvamento é feito pela função virtual OnSaveDocument.

    Há dois motivos comuns para personalizar ID_FILE_SAVE. Para documentos que não salvam, basta remover os itens de menu ID_FILE_SAVE e os botões de barra de ferramentas da interface do usuário. Além disso, certifique-se de nunca sujar o documento (ou seja, nunca chamar CDocument::SetModifiedFlag) e a estrutura nunca fará com que o documento seja salvo. Para documentos que salvam em outro lugar que não seja um arquivo de disco, defina um novo comando para essa operação.

    No caso de um COleServerDoc, ID_FILE_SAVE é usado tanto para salvar arquivos (para documentos normais) quanto para atualizar arquivos (para documentos inseridos).

    Se os dados do documento forem armazenados em arquivos de disco individuais, mas você não quiser usar a implementação de serialização padrão CDocument, você deverá substituir CDocument::OnSaveDocument em vez de OnFileSave.

  • ID_FILE_SAVE_AS Salva o documento atual em um nome de arquivo diferente.

    A implementação CDocument::OnFileSaveAs usa a mesma rotina auxiliar CDocument::DoSave que OnFileSave. O comando OnFileSaveAs será tratado da mesma forma que ID_FILE_SAVE se os documentos não tiverem um nome de arquivo antes do salvamento. COleServerDoc::OnFileSaveAs implementa a lógica para salvar um arquivo de dados de documento normal ou salvar um documento de servidor que representa um objeto OLE inserido em outro aplicativo como um arquivo separado.

    Se você personalizar a lógica de ID_FILE_SAVE, provavelmente desejará personalizar ID_FILE_SAVE_AS de forma semelhante ou a operação "Salvar como" pode não se aplicar ao seu documento. Você pode remover o item de menu da barra de menus se ele não for necessário.

  • ID_FILE_SAVE_COPY_AS Salva um documento atual de cópia em um novo nome.

    A implementação COleServerDoc::OnFileSaveCopyAs é muito semelhante a CDocument::OnFileSaveAs, exceto que o objeto do documento não é "anexado" ao arquivo subjacente após o salvamento. Ou seja, se o documento na memória foi "modificado" antes de salvar, ele ainda será "modificado". Além disso, esse comando não tem efeito no nome do caminho ou no título armazenado no documento.

  • ID_FILE_UPDATE Notifica o contêiner para salvar um documento inserido.

    A implementação COleServerDoc::OnUpdateDocument notifica o contêiner de que a inserção deve ser salva. Em seguida, o contêiner chama as APIs OLE apropriadas para salvar o objeto inserido.

  • ID_FILE_PAGE_SETUP Invoca um diálogo de configuração/layout de página específica do aplicativo.

    Atualmente, não há padrão para esse diálogo e a estrutura não tem nenhuma implementação padrão desse comando.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_FILE_PRINT_SETUP Invoca o diálogo Configuração de impressão padrão.

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    Esse comando invoca o diálogo de configuração de impressão padrão que permite ao usuário personalizar as configurações de impressão e impressora para pelo menos este documento ou, no máximo, todos os documentos neste aplicativo. Você deve usar o Painel de Controle para alterar as configurações de impressora padrão para todo o sistema.

    CWinApp::OnFilePrintSetup tem uma implementação muito simples criando um objeto CPrintDialog e chamando a função de implementação CWinApp::DoPrintDialog. Isso define a configuração da impressora padrão do aplicativo.

    A necessidade comum de personalizar esse comando é permitir as configurações de impressora por documento, que devem ser armazenadas com o documento quando salvas. Para fazer isso, você deve adicionar um manipulador de mapa de mensagens em sua classe CDocument que cria um objeto CPrintDialog, inicializa-o com os atributos de impressora apropriados (geralmente hDevMode e hDevNames), chamar CPrintDialog::DoModal e salvar as configurações da impressora alteradas. Para uma implementação robusta, você deve examinar a implementação de CWinApp::DoPrintDialog para detectar erros e CWinApp::UpdatePrinterSelection para lidar com padrões sensíveis e acompanhar as alterações da impressora em todo o sistema.

  • ID_FILE_PRINT Impressão padrão do documento atual

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CView para habilitar essa funcionalidade.

    Esse comando imprime o documento atual ou, mais corretamente, inicia o processo de impressão, que envolve invocar o diálogo de impressão padrão e executar o mecanismo de impressão.

    CView::OnFilePrint implementa esse comando e o loop de impressão principal. Ele chama o CView::OnPreparePrinting virtual para solicitar ao usuário o diálogo de impressão. Em seguida, ele prepara o DC de saída para acessar a impressora, apresenta o diálogo de progresso da impressão (AFX_IDD_PRINTDLG) e envia o escape StartDoc para a impressora. CView::OnFilePrint também contém o loop de impressão orientado para a página principal. Para cada página, ele chama o CView::OnPrepareDC virtual seguido de um escape StartPage e chamando o CView::OnPrint virtual para essa página. Quando concluído, o CView::OnEndPrinting virtual é chamado e o diálogo de progresso da impressão é fechado.

    A arquitetura de impressão do MFC foi projetada para se conectar de várias maneiras diferentes para impressão e visualização de impressão. Normalmente, você encontrará as várias funções CView substituíveis adequadas para qualquer tarefa de impressão orientada para páginas. Somente no caso de um aplicativo que usa a impressora para saída não orientada para páginas, você deverá encontrar a necessidade de substituir a implementação ID_FILE_PRINT.

  • ID_FILE_PRINT_PREVIEW Insira o modo de visualização de impressão do documento atual.

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CView para habilitar essa funcionalidade.

    CView::OnFilePrintPreview inicia o modo de visualização de impressão chamando a função auxiliar CView::DoPrintPreview documentada. CView::DoPrintPreview é o mecanismo principal para o loop de visualização de impressão, assim como OnFilePrint é o mecanismo principal para o loop de impressão.

    A operação de visualização de impressão pode ser personalizada de diversas maneiras passando parâmetros diferentes para DoPrintPreview. Consulte a Nota Técnica 30, que discute alguns detalhes da visualização de impressão e como personalizá-la.

  • ID_FILE_MRU_FILE1...FILE16 Um intervalo de IDs de comando para a lista MRU de arquivo.

    CWinApp::OnUpdateRecentFileMenu é um manipulador da interface do usuário do comando de atualização que é um dos usos mais avançados do mecanismo ON_UPDATE_COMMAND_UI. No recurso de menu, você precisa definir apenas um único item de menu com ID_FILE_MRU_FILE1 de ID. Esse item de menu permanece inicialmente desabilitado.

    À medida que a lista MRU cresce, mais itens de menu são adicionados à lista. A implementação CWinApp é o limite padrão dos quatro arquivos usados mais recentemente. Você pode alterar o padrão chamando CWinApp::LoadStdProfileSettings com um valor maior ou menor. A lista MRU é armazenada no arquivo .INI do aplicativo. A lista será carregada na função InitInstance do aplicativo se você chamar LoadStdProfileSettings e será salva quando o aplicativo for encerrado. O manipulador da interface do usuário do comando de atualização MRU também converterá caminhos absolutos em caminhos relativos para exibição no menu de arquivo.

    CWinApp::OnOpenRecentFile é o manipulador ON_COMMAND que executa o comando real. Ele simplesmente obtém o nome do arquivo da lista de MRU e chama CWinApp::OpenDocumentFile, o que faz todo o trabalho de abertura do arquivo e atualização da lista de MRU.

    A personalização desse identificador de comandos não é recomendada.

  • ID_EDIT_CLEAR Limpa a seleção atual

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando usando CEdit::Clear. O comando será desabilitado se não houver seleção atual.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_CLEAR_ALL Limpa o documento inteiro.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando. Consulte o Tutorial do MFC de exemplo SCRIBBLE para obter uma implementação de exemplo.

  • ID_EDIT_COPY Copia a seleção atual para a área de transferência.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando, que copia o texto selecionado no momento para a Área de Transferência como CF_TEXT usando CEdit::Copy. O comando será desabilitado se não houver seleção atual.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_CUT Corta a seleção atual na área de transferência.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando, que recorta o texto selecionado no momento para a Área de Transferência como CF_TEXT usando CEdit::Cut. O comando será desabilitado se não houver seleção atual.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_FIND Inicia a operação de localização, apresenta o diálogo Localizar sem modo.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando, que chama a função auxiliar de implementação OnEditFindReplace para usar e armazenar as configurações anteriores para localizar/substituir em variáveis de implementação privadas. A classe CFindReplaceDialog é usada para gerenciar o diálogo sem modo para solicitação ao usuário.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_PASTE Insere o conteúdo da Área de Transferência atual.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando, que copia os dados atuais da Área de Transferência substituindo o texto selecionado usando CEdit::Paste. O comando será desabilitado se não houver CF_TEXT na Área de Transferência.

    COleClientDoc fornece apenas um manipulador da interface do usuário de comando de atualização para este comando. Se a Área de Transferência não contiver um item/objeto OLE que permite inserção, o comando será desabilitado. Você é responsável por gravar o manipulador para o comando real para fazer a colagem real. Se o aplicativo OLE também puder colar outros formatos, você deverá fornecer seu próprio manipulador da interface do usuário de comando de atualização em seu modo de exibição ou documento (ou seja, em algum lugar antes de COleClientDoc no roteamento de destino de comando).

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

    Para substituir a implementação padrão do OLE, use COleClientItem::CanPaste.

  • ID_EDIT_PASTE_LINK Insere um link do conteúdo da Área de Transferência atual.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    COleDocument fornece apenas um manipulador da interface do usuário de comando de atualização para este comando. Se a Área de Transferência não contiver um item/objeto OLE vinculável, o comando será desabilitado. Você é responsável por gravar o manipulador para o comando real para fazer a colagem real. Se o aplicativo OLE também puder colar outros formatos, você deverá fornecer seu próprio manipulador da interface do usuário de comando de atualização em seu modo de exibição ou documento (ou seja, em algum lugar antes de COleDocument no roteamento de destino de comando).

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

    Para substituir a implementação padrão do OLE, use COleClientItem::CanPasteLink.

  • ID_EDIT_PASTE_SPECIAL Insere o conteúdo da Área de Transferência atual com opções.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView. O MFC não fornece esse diálogo.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_REPEAT Repete a última operação.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando para repetir a última operação de localização. As variáveis de implementação privadas para a última localização são usadas. O comando será desabilitado se uma localização não puder ser tentada.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_REPLACE Inicia a operação de substituição, apresenta o diálogo de substituição sem modo.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando, que chama a função auxiliar de implementação OnEditFindReplace para usar e armazenar as configurações anteriores para localizar/substituir em variáveis de implementação privadas. A classe CFindReplaceDialog é usada para gerenciar o diálogo sem modo que solicita o usuário.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_SELECT_ALL Seleciona o documento inteiro.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando, que seleciona todo o texto no documento. O comando será desabilitado se não houver seleção de texto.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_UNDO Desfaz a última operação.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    CEditView fornece uma implementação desse comando usando CEdit::Undo. O comando será desabilitado se CEdit::CanUndo retornar FALSE.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_EDIT_REDO Refaz a última operação.

    Atualmente, não há nenhuma implementação padrão para este comando. Isso deve ser implementado para cada classe derivada de CView.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_WINDOW_NEW Abre outra janela no documento ativo.

    CMDIFrameWnd::OnWindowNew implementa esse recurso avançado usando o modelo de documento do documento atual para criar outro quadro contendo outra exibição do documento atual.

    Como a maioria dos comandos de menu da janela MDI (interface de vários documentos), o comando será desabilitado se não houver nenhuma janela MDI filho ativa.

    A personalização desse identificador de comandos não é recomendada. Se você quiser fornecer um comando que crie exibições adicionais ou janelas com quadros, provavelmente será melhor inventar seu próprio comando. Você pode clonar o código CMDIFrameWnd::OnWindowNew e modificá-lo para o quadro específico e exibir as classes desejadas.

  • ID_WINDOW_ARRANGE Organiza ícones na parte inferior de uma janela MDI.

    CMDIFrameWnd implementa esse comando MDI padrão em uma função auxiliar de implementação OnMDIWindowCmd. Esse auxiliar mapeia as IDs de comando para mensagens da janela MDI e, portanto, pode compartilhar muito código.

    Como a maioria dos comandos de menu da janela MDI, o comando será desabilitado se não houver nenhuma janela MDI filho ativa.

    A personalização desse identificador de comandos não é recomendada.

  • ID_WINDOW_CASCADE Propaga janelas para que elas se sobreponham.

    CMDIFrameWnd implementa esse comando MDI padrão em uma função auxiliar de implementação OnMDIWindowCmd. Esse auxiliar mapeia as IDs de comando para mensagens da janela MDI e, portanto, pode compartilhar muito código.

    Como a maioria dos comandos de menu da janela MDI, o comando será desabilitado se não houver nenhuma janela MDI filho ativa.

    A personalização desse identificador de comandos não é recomendada.

  • ID_WINDOW_TILE_HORZ Organiza as janelas lado a lado horizontalmente.

    Esse comando é implementado em CMDIFrameWnd da mesma forma que ID_WINDOW_CASCADE, exceto que uma mensagem da janela MDI diferente é usada para a operação.

    Escolha a orientação de bloco padrão para seu aplicativo. Isso pode ser feito alterando a ID do item de menu "Bloco" da janela para ID_WINDOW_TILE_HORZ ou ID_WINDOW_TILE_VERT.

  • ID_WINDOW_TILE_VERT Organiza as janelas lado a lado verticalmente.

    Esse comando é implementado em CMDIFrameWnd da mesma forma que ID_WINDOW_CASCADE, exceto que uma mensagem da janela MDI diferente é usada para a operação.

    Escolha a orientação de bloco padrão para seu aplicativo. Isso pode ser feito alterando a ID do item de menu "Bloco" da janela para ID_WINDOW_TILE_HORZ ou ID_WINDOW_TILE_VERT.

  • ID_WINDOW_SPLIT Interface do teclado para o divisor.

    CView identifica esse comando para a implementação CSplitterWnd. Se o modo de exibição fizer parte de uma janela do divisor, o comando delegará à função de implementação CSplitterWnd::DoKeyboardSplit. Isso colocará o divisor em um modo que permitirá que os usuários do teclado dividam ou revertam a divisão de uma janela de divisor.

    Esse comando será desabilitado se o modo de exibição não estiver em um divisor.

    A personalização desse identificador de comandos não é recomendada.

  • ID_APP_ABOUT Invoca a caixa de diálogo Sobre.

    Não há nenhuma implementação padrão para a caixa Sobre de um aplicativo. O aplicativo padrão criado pelo AppWizard criará uma classe de diálogo personalizada para seu aplicativo e a usará como sua caixa Sobre. AppWizard também gravará o manipulador de comando trivial que manipula esse comando e invoca o diálogo.

    Você quase sempre implementará esse comando.

  • ID_APP_EXIT Sai do aplicativo.

    CWinApp::OnAppExit identifica esse comando enviando uma mensagem WM_CLOSE para a janela principal do aplicativo. O desligamento padrão do aplicativo (solicitando arquivos sujos e assim por diante) é identificado pela implementação CFrameWnd.

    A personalização desse identificador de comandos não é recomendada. A substituição de CWinApp::SaveAllModified ou a lógica de fechamento CFrameWnd são recomendadas.

    Se você optar por implementar esse comando, recomendamos que você use essa ID de comando.

  • ID_HELP_INDEX Lista tópicos de Ajuda do arquivo .HLP.

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    CWinApp::OnHelpIndex identifica esse comando chamando CWinApp::WinHelp de maneira trivial.

    A personalização desse identificador de comandos não é recomendada.

  • ID_HELP_USING Exibe ajuda sobre como usar a Ajuda.

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    CWinApp::OnHelpUsing identifica esse comando chamando CWinApp::WinHelp de maneira trivial.

    A personalização desse identificador de comandos não é recomendada.

  • ID_CONTEXT_HELP Entra no modo de ajuda SHIFT-F1.

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    CWinApp::OnContextHelp identifica esse comando definindo o cursor do modo de ajuda, inserindo um loop modal e aguardando o usuário selecionar uma janela para obter ajuda. Consulte a Nota Técnica 28 para obter mais detalhes sobre a implementação da Ajuda do MFC.

    A personalização desse identificador de comandos não é recomendada.

  • ID_HELP Ajuda no contexto atual

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    CWinApp::OnHelp identifica esse comando obtendo o contexto de ajuda certo para o contexto atual do aplicativo. Isso identifica a ajuda F1 simples, ajuda em caixas de mensagens e assim por diante. Consulte a Nota Técnica 28 para obter mais detalhes sobre a implementação da ajuda do MFC.

    A personalização desse identificador de comandos não é recomendada.

  • ID_DEFAULT_HELP Exibe ajuda padrão para contexto

    Observação

    Isso deve ser conectado ao mapa de mensagens da classe derivada por CWinApp para habilitar essa funcionalidade.

    Esse comando geralmente é mapeado para CWinApp::OnHelpIndex.

    Um manipulador de comandos diferente poderá ser fornecido se uma distinção entre a Ajuda padrão e o índice da Ajuda for desejada.

  • ID_NEXT_PANE Vai para o próximo painel

    CView identifica esse comando para a implementação CSplitterWnd. Se o modo de exibição fizer parte de uma janela do divisor, o comando delegará à função de implementação CSplitterWnd::OnNextPaneCmd. Isso moverá o modo de exibição ativo para o próximo painel no divisor.

    Esse comando será desabilitado se a exibição não estiver em um divisor ou não houver próximo painel para ir.

    A personalização desse identificador de comandos não é recomendada.

  • ID_PREV_PANE Vai para o painel anterior

    CView identifica esse comando para a implementação CSplitterWnd. Se o modo de exibição fizer parte de uma janela do divisor, o comando delegará à função de implementação CSplitterWnd::OnNextPaneCmd. Isso moverá o modo de exibição ativo para o painel anterior no divisor.

    Esse comando será desabilitado se a exibição não estiver em um divisor ou não houver painel anterior para ir.

    A personalização desse identificador de comandos não é recomendada.

  • ID_OLE_INSERT_NEW Insere um novo objeto OLE

    Atualmente, não há nenhuma implementação padrão para este comando. Você deve implementar isso para que sua classe derivada de CView insira um novo item/objeto OLE na seleção atual.

    Todos os aplicativos cliente OLE devem implementar esse comando. O AppWizard, com a opção OLE, criará uma implementação de esqueleto de OnInsertObject em sua classe de exibição que você terá que concluir.

    Consulte o exemplo OCLIENT do OLE do MFC para obter uma implementação completa desse comando.

  • ID_OLE_EDIT_LINKS Edita links OLE

    COleDocument identifica esse comando usando a implementação fornecida pelo MFC do diálogo de links OLE padrão. A implementação desse diálogo é acessada por meio da classe COleLinksDialog. Se o documento atual não contiver links, o comando será desabilitado.

    A personalização desse identificador de comandos não é recomendada.

  • ID_OLE_VERB_FIRST...LAST Um intervalo de ID para verbos OLE

    COleDocument usa esse intervalo da ID de comando para os verbos compatíveis com o item/objeto OLE selecionado no momento. Deve ser um intervalo, pois um determinado item/tipo de objeto OLE pode dar suporte a zero ou mais verbos personalizados. No menu do aplicativo, você deve ter um item de menu com a ID de ID_OLE_VERB_FIRST. Quando o programa for executado, o menu será atualizado com a descrição do verbo do menu apropriado (ou menu pop-up com muitos verbos). O gerenciamento do menu OLE é identificado por AfxOleSetEditMenu, feito no manipulador da interface do usuário do comando de atualização para este comando.

    Não há manipuladores de comando explícitos para identificar cada ID de comando nesse intervalo. COleDocument::OnCmdMsg é substituído para capturar todas as IDs de comando nesse intervalo, transformá-las em números de verbo baseados em zero e iniciar o servidor para esse verbo (usando COleClientItem::DoVerb).

    A personalização ou outro uso desse intervalo da ID de comando não é recomendado.

  • ID_VIEW_TOOLBAR Ativa e desativa a barra de ferramentas

    CFrameWnd identifica esse comando e o manipulador de interface do usuário de comando de atualização para alternar o estado visível da barra de ferramentas. A barra de ferramentas deve ser uma janela filho do quadro com a ID da janela filho de AFX_IDW_TOOLBAR. O manipulador de comandos realmente alterna a visibilidade da janela da barra de ferramentas. CFrameWnd::RecalcLayout é usado para redesenhar a janela com moldura com a barra de ferramentas em seu novo estado. O manipulador da interface do usuário do comando de atualização verifica o item de menu quando a barra de ferramentas está visível.

    A personalização desse identificador de comandos não é recomendada. Se quiser adicionar barras de ferramentas adicionais, você desejará clonar e modificar o manipulador de comandos e o manipulador da interface do usuário de comando de atualização para este comando.

  • ID_VIEW_STATUS_BAR Ativa e desativa a barra de status

    Esse comando é implementado em CFrameWnd da mesma forma que ID_VIEW_TOOLBAR, exceto que uma ID de janela filho diferente (AFX_IDW_STATUS_BAR) é usada.

Manipuladores de comando Atualizar somente

Várias IDs de comando padrão são usadas como indicadores em barras de status. Elas usam o mesmo mecanismo de tratamento da interface do usuário de comando de atualização para exibir o estado visual atual durante o tempo ocioso do aplicativo. Como eles não podem ser selecionados pelo usuário (ou seja, você não pode enviar por push um painel da barras de status), não faz sentido ter um manipulador de ON_COMMAND para essas IDs de comando.

  • ID_INDICATOR_CAPS: indicador de bloqueio CAP.

  • ID_INDICATOR_NUM : indicador de bloqueio NUM.

  • ID_INDICATOR_SCRL : indicador de bloqueio SCRL.

  • ID_INDICATOR_KANA: indicador de bloqueio KANA (aplicável somente a sistemas japoneses).

Todos os três são implementados em CFrameWnd::OnUpdateKeyIndicator, um auxiliar de implementação que usa a ID de comando para mapear para a Chave Virtual apropriada. Uma implementação comum habilita ou desabilita (para painéis de status desabilitados = sem texto) o objeto CCmdUI dependendo se a Chave Virtual apropriada está bloqueada no momento.

A personalização desse identificador de comandos não é recomendada.

  • ID_INDICATOR_EXT: indicador de seleção EXTended.

  • ID_INDICATOR_OVR: indicador OVeRstrike.

  • ID_INDICATOR_REC: indicador RECording.

Atualmente, não há nenhuma implementação padrão para estes indicadores.

Se você optar por implementar esses indicadores, recomendamos que você use essas IDs de indicador e mantenha a ordenação dos indicadores na barra de status (ou seja, nesta ordem: EXT, CAP, NUM, SCRL, OVR, REC).

Confira também

Observações técnicas por número
Observações técnicas por categoria