Compartilhar via


Como adicionar roteamento de comando ao controle dos Windows Forms

O CWinFormsView roteia comandos e mensagens de interface do usuário de comando de atualização para o controle do usuário para permitir que ele manipule comandos do MFC (por exemplo, itens de menu de quadro e botões de barra de ferramentas).

O controle de usuário usa ICommandTarget::Initialize para armazenar uma referência ao objeto de origem do comando em m_CmdSrc, conforme mostrado no exemplo a seguir. Para usar ICommandTarget, você precisa adicionar uma referência a mfcmifc80.dll.

CWinFormsView manipula várias das notificações comuns de exibição do MFC encaminhando-as para o controle de usuário gerenciado. Essas notificações incluem os métodos OnInitialUpdate, OnUpdate e OnActivateView.

Este tópico pressupõe que você tenha concluído anteriormente Como criar o controle de usuário e o host em uma caixa de diálogo e Como criar o controle de usuário e hospedar uma exibição MDI.

Para criar o aplicativo host do MFC

  1. Abra a Biblioteca de Controle do Windows Forms que você criou em Como criar o controle de usuário e o host em uma caixa de diálogo.

  2. Adicione uma referência a mfcmifc80.dll. Você pode fazer isso clicando com o botão direito do mouse no nó do projeto em Gerenciador de Soluções, selecionando Adicionar, Referência e, em seguida, navegando até Microsoft Visual Studio 10.0\VC\atlmfc\lib.

  3. Abra UserControl1.Designer.cs e adicione a seguinte instrução using:

    using Microsoft.VisualC.MFC;
    
  4. Além disso, em UserControl1.Designer.cs, altere esta linha:

    partial class UserControl1
    

    para isto:

    partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
    
  5. Adicione esta como a primeira linha da definição de classe para UserControl1:

    private ICommandSource m_CmdSrc;
    
  6. Adicione as seguintes definições de método a UserControl1 (criaremos a ID do controle do MFC na próxima etapa):

    public void Initialize (ICommandSource cmdSrc)
    {
       m_CmdSrc = cmdSrc;
       // need ID of control in MFC dialog and callback function
       m_CmdSrc.AddCommandHandler(32771, new CommandHandler (singleMenuHandler));
    }
    
    private void singleMenuHandler (uint cmdUI)
    {
       // User command handler code
       System.Windows.Forms.MessageBox.Show("Custom menu option was clicked.");
    }
    
  7. Abra o aplicativo MFC criado em Como criar o controle de usuário e hospedar uma exibição MDI.

  8. Adicione uma opção de menu que invocará singleMenuHandler.

    Vá para o Modo de Exibição de Recursos (Ctrl+Shift+E), expanda a pasta Menu e clique duas vezes em IDR_MFC02TYPE. Isso exibe o editor de menu.

    Adicione uma opção de menu na parte inferior do menu Exibir. Observe a ID da opção de menu na janela Propriedades. Salve o arquivo.

    Em Gerenciador de Soluções, abra o arquivo Resource.h, copie o valor da ID para a opção de menu que você acabou de adicionar e cole esse valor como o primeiro parâmetro para a chamada m_CmdSrc.AddCommandHandler no método Initialize do projeto C# (substituindo 32771 se necessário).

  9. Compile e execute o projeto.

    No menu Compilar, clique em Compilar Solução.

    No menu Depurar, clique em Iniciar sem depurar.

    Selecione a opção de menu que você adicionou. Observe que o método no .dll é chamado.

Confira também

Hospedando um controle de usuário do Windows Forms como uma exibição do MFC
Interface ICommandSource
Interface ICommandTarget