Como a subclasse janelas no Windows Forms usando o Visual C++ .NET ou Visual C++ 2005

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 815774
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 311317.
Para obter uma Microsoft Visual translation from VPE for Csharp .NET versão deste artigo, consulte 815775.

Este artigo se refere aos seguintes namespaces Microsoft .NET Framework Class Library:
  • System::ComponentModel
  • System::Collections
  • System::Windows::Forms

NESTA TAREFA

Sumário
Este artigo passo a passo descreve diversas técnicas de subclassificação que você pode usar no Microsoft Visual C++. NET.

Este artigo descreve como subclasse um TextBox controle classe. O método WndProc da classe de controle TextBox é substituído para fornecer funcionalidade diferente. Este artigo também descreve como a subclasse um formulário de classe, substituindo o método WndProc da classe formulário .

Este artigo também descreve como subclasse qualquer HWND controle classe. Uma nova classe é derivada de classe NativeWindow , e o método WndProc da classe base é substituído para NativeWindow subclasse de classe.

Back to the top

Subclasse um controle

  1. Para criar um projeto Visual C++.NET Windows Application chamado SubclassDemo, execute essas etapas:
    1. Inicie o Microsoft Visual Studio .NET 2003 ou Microsoft Visual Studio 2005.
    2. No menu arquivo , aponte para novo e, em seguida, clique em Project . A caixa de diálogo New Project é exibida.
    3. Em Project Types , clique em Projetos do Visual c++ .

      Observação No Visual Studio 2005, Visual C++ Projects é alterado para Visual C++ .
    4. Em modelos , clique em Windows Forms Application (NET) .

      Observação No Visual Studio 2005, Windows Forms Application (. NET) é alterado para Windows Forms Application .
    5. Na caixa nome , digite SubclassDemo e, em seguida, clique em OK .

      Por padrão, o formulário de Form1 é criado.
  2. Para adicionar uma nova classe ao projeto SubclassDemo, execute essas etapas:
    1. No menu Project , clique em Adicionar classe . Add Class - caixa de diálogo SubclassDemo aparece.
    2. Em categorias , clique em genérico .

      Observação No Visual Studio 2005, genérico é alterado para C++ .
    3. Em modelos , clique em Classe do C++ genérico .

      Observação No Visual Studio 2005, Classe do C++ genérico é alterado para Classe do C++ .
    4. Clique em Abrir . A caixa de diálogo Assistente de classe do C++ genérico - SubclassDemo aparece.
    5. Na caixa nome da classe , digite SCTextBox e, em seguida, clique em Concluir .
  3. Adicione a instrução a seguir na parte superior do código no arquivo SCTextBox.h:
    using namespace System::Windows::Forms;
  4. Verifique a classe SCTextBox que um público gerenciado C++ classe que deriva da classe TextBox padrão. Para fazer isso, altere a definição de classe SCTextBox usando a linha de código a seguir:
    public __gc class SCTextBox : public TextBox
  5. Substitua o método WndProc herdado na nova subclasse. Primeiro, ajuste de registro a tecla CTRL. Em seguida, ajusta o registro a chave de X e, em seguida, desativar o atalho de teclado CTRL + X que você usa para excluir algum texto e copiar esse texto para a área de transferência. Para fazer isso, substitua o código existente para a classe SCTextBox com o código a seguir:
    public __gc class SCTextBox : public TextBox{public:    SCTextBox(void);    ~SCTextBox(void);private:    static const int  WM_CHAR = 0x102;protected:    void WndProc(Message *m)    {           // Check if the CTRL key is being pressed.        if ( SCTextBox::ModifierKeys == Keys::Control )        {            switch(m->Msg)            {                case WM_CHAR:                    // Disable the CTRL+X key combination.                    switch(m->WParam.ToInt32())                    {                        // Check for "X" (the twenty-fourth letter of the alphabet).                        case 24 :                            break;                            // Do nothing here to disable the default message handling.                        default:                            // Make sure that you pass unhandled messages back to the default message handler.                            TextBox::WndProc(m);                            break;                    }                    break;                default:                    // Make sure that you pass unhandled messages back to the default message handler.                   TextBox::WndProc(m);                   break;            }        }        else            // Make sure that you pass unhandled messages back to the default message handler.            TextBox::WndProc(m);    }};
    Observação você deve adicionar o common language runtime oferecem suporte a compilador opção (/ CLR: oldSyntax) no Visual C++ 2005 a compilar com êxito o exemplo de código anterior. Para adicionar a opção de compilador de suporte de tempo de execução idioma comum no Visual C++ 2005, siga estas etapas:
    1. Clique em Project e clique em <ProjectName> propriedades .

      Observação <ProjectName> é um espaço reservado para o nome do projeto.
    2. Expanda Configuration Properties e, em seguida, clique em Geral .
    3. Clique para selecionar Common Language Runtime suporte, sintaxe antiga (/ CLR: oldSyntax) no projeto oferece suporte a Common Language Runtime configuração no painel à direita, clique em Aplicar e em seguida, clique em OK .
    Para obter mais informações sobre o common language runtime oferece suporte à opção do compilador, visite o seguinte site da Microsoft:
    / clr (Common Language Runtime Compilation)
    http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx
    Estas etapas se aplicam o artigo inteiro.
  6. Abra o formulário Form1 no modo de design e adicione um controle TextBox para Form1 .
  7. Abra o arquivo Form1.h e, em seguida, adicione o seguinte código após a diretiva # pragma :
    #include "SCTextBox.h"
  8. Substitua referências para o controle TextBox padrão por referências para o controle SCTextBox que você adicionou. Para fazer isso, substitua todas as ocorrências de TextBox SCTextBox em seu código. Por exemplo, use o seguinte código:
    // private: System::Windows::Forms::TextBox *  textBox1;// is nowprivate: SCTextBox *  textBox1;
    // this->textBox1 = new System::Windows::Forms::TextBox();// is nowthis->textBox1 = new SCTextBox();
  9. Salvar o projeto e, em seguida, pressione F5 para executar o aplicativo no modo de depuração.
  10. Digite algum texto de exemplo na caixa de texto que está localizada no formulário Form1 .
  11. Selecione o texto que você digitou na etapa 10 e, em seguida, pressione CTRL + x. Observe que a combinação de teclas não exclui o texto selecionado.
  12. Clique com o botão direito do mouse na caixa de texto e clique em Recortar . Observe que o texto selecionado será excluído.
Back to the top

Subclasse um formulário

  1. Para criar um projeto Visual C++.NET ou Visual C++ 2005 Windows Application chamado SubclassingDemo, execute essas etapas:
    1. Inicie o Visual Studio .NET 2003 ou o Visual Studio 2005.
    2. No menu arquivo , aponte para novo e, em seguida, clique em Project . A caixa de diálogo New Project é exibida.
    3. Em Project Types , clique em Projetos do Visual c++ .

      Observação No Visual Studio 2005, Visual C++ Projects é alterado para Visual C++ .
    4. Em modelos , clique em Windows Forms Application (NET) .

      Observação No Visual Studio 2005, Windows Forms Application (. NET) é alterado para Windows Forms Application .
    5. Na caixa nome , digite SubclassingDemo e, em seguida, clique em OK .

      Por padrão, o formulário de Form1 é criado.
  2. Substitua o método WndProc herdado. Para fazer isso, adicione o procedimento WndProc void à classe Form1 da seguinte maneira:
    protected:   void WndProc(System::Windows::Forms::Message *m)   {      // Perform the custom processing that you require for this message.      System::Diagnostics::Debug::WriteLine(m->ToString(), S"Form1.WndProc");      // Forward the message to the WndProc procedure of the base class.      Form::WndProc(m);   }
  3. Verifique se a janela de saída está aberta ou pressione CTRL + ALT + O, para abrir a janela de saída.
  4. Salvar o projeto e, em seguida, pressione F5 para executar o aplicativo no modo de depuração.
  5. Mova o ponteiro do mouse sobre o Form1 formulário.

    Você observar mensagens do Windows na janela de saída para cada ação que você executar no formulário Form1 . O formulário de Form1 subclasse exibe essas mensagens.
Back to the top

Lidar com qualquer HWND subclasse

  1. Adicione uma nova classe é nomeada SubclassHWND projeto SubclassingDemo. Para fazer isso, execute as seguintes etapas:
    1. No menu Project , clique em Adicionar classe . Add Class - caixa de diálogo SubclassingDemo aparece.
    2. Em categorias , clique em genérico .

      Observação No Visual Studio 2005, genérico é alterado para C++ .
    3. Em modelos , clique em Classe do C++ genérico .

      Observação No Visual Studio 2005, Classe do C++ genérico é alterado para Classe do C++ .
    4. Clique em Abrir . A caixa de diálogo Assistente de classe do C++ genérico - SubclassingDemo aparece.
    5. Na caixa nome da classe , digite SubclassHWND e, em seguida, clique em Concluir .
  2. Adicione a instrução a seguir na parte superior do código no arquivo SubclassHWND.h:
    using namespace System::Windows::Forms;
  3. Substitua o código existente para a classe SubclassHWND com o código a seguir:
    public __gc class SubclassHWND : public NativeWindow{public:    SubclassHWND(void);    ~SubclassHWND(void);protected:    void WndProc(Message *m)    {        // Perform the custom processing that you require for this message.        System::Diagnostics::Debug::WriteLine(m->ToString(),S"SubclassHWND");        // Forward the message to the WndProc procedure of the base class.        NativeWindow::WndProc(m);    }};
  4. Abra o arquivo Form1.h e, em seguida, adicione o seguinte código após a diretiva # pragma :
    #include "SubclassHWND.h"
  5. Para usar a classe SubclassHWND , adicionar o seguinte código ao evento Load do formulário Form1 :
    SubclassHWND * s = new SubclassHWND();s->AssignHandle(this->Handle);// The s subclass now listens to the messages of the form.
  6. Verifique se a janela de saída está aberta ou pressione CTRL + ALT + O, para abrir a janela de saída.
  7. Salvar o projeto e, em seguida, pressione F5 para executar o aplicativo no modo de depuração.
  8. Mova o ponteiro do mouse sobre o Form1 formulário.

    Você observar mensagens do Windows na janela de saída para cada ação que você executar no formulário Form1 . O objeto SubClassHWND recebe essas mensagens.
Back to the top
Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
816190Controla como interceptar pressionamentos de teclas no .NET usando o Visual C++ .NET
Back to the top
UserControl

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 815774 - Última Revisão: 01/17/2006 00:21:36 - Revisão: 2.1

Microsoft .NET Framework 1.1, Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition

  • kbmt kbmsg kbforms kbwindowsforms kbwndwproc kbctrl kbcontrol kbhowtomaster KB815774 KbMtpt
Comentários