A subclasse Windows no Windows Forms usando translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 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: 815775
Para uma versão deste artigo do Microsoft Visual Basic. NET, consulte 311317.

NESTA TAREFA

Sumário
Este artigo passo a passo descreve diversas técnicas de subclassificação que você pode usar em translation from VPE for Csharp Visual .NET ou Visual translation from VPE for Csharp 2005.

back to the top

Subclasse um controle

  1. Para criar um novo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005 Windows Application chamado SubclassingDemo, execute essas etapas:
    1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
    2. No menu arquivo , aponte para novo e, em seguida, clique em projetos .
    3. Clique em projetos do Visual translation from VPE for Csharp em Tipos de projeto e, em seguida, clique em Windows Application em modelos .

      Observação No Visual translation from VPE for Csharp 2005, clique em translation from VPE for Csharp Visual em Project Types .
    4. Na caixa de texto nome , digite SubclassingDemo .
  2. Para adicionar um novo módulo de classe para o projeto, clique em Adicionar classe no menu projeto .
  3. Na caixa de texto nome , digite SCTextBox.cs e, em seguida, clique em Abrir .
  4. Adicione a instrução a seguir na parte superior do código SCTextBox.cs:
    using System.Windows.Forms;
  5. Substitua WndProc herdada. Para fazer isso, substitua o código de classe SCTextBox existente com o código a seguir:
    public class SCTextBox : TextBox{    private const int  WM_CHAR = 0x102;    protected  override void WndProc(ref Message m)     {	         //See if the CTRL key is being pressed.         if ( SCTextBox.ModifierKeys.CompareTo(Keys.Control) == 0)         {																																				         switch(m.Msg)             {                 case WM_CHAR:                      // Disable CTRL+X.                      switch(m.WParam.ToInt32())                      {                           case 24 ://X = 24th letter of alphabet                                break;                                // Do nothing here to disable the default message handling.                           default:                                //Make sure that you pass unhandled messages back to the default message handler.                                base.WndProc( ref m);                                break;                        }                        break;                  default:                        //Make sure that you pass unhandled messages back to the default message handler.                        base.WndProc(ref m);                        break;                 }              }           else              //Make sure that you pass unhandled messages back to the default message handler.              base.WndProc(ref m);    }}
  6. Arraste um controle TextBox do Toolbox para Form1.cs.
  7. Edite o código de Form1.cs da seguinte maneira:
    1. Expanda a região é marcada no código da seguinte maneira:
      Windows Form Designer generated code 
    2. Substitua referências para o controle TextBox padrão por referências para a nova classe SCTextBox . Para fazer isso, substitua todas as ocorrências da classe TextBox SCTextBox no código que é gerado.
      Por exemplo:
      //private System.Windows.Forms.TextBox textBox1;//is now//private SCTextBox textBox1;//this.textBox1 = new System.Windows.Forms.TextBox();//is now//this.textBox1= new SCTextBox();
  8. Salve o projeto. No menu Debug , clique em Iniciar .
  9. Digite algum texto de exemplo na caixa de texto.
  10. Selecione o texto e, em seguida, pressione CTRL + x. Observe que essa combinação de teclas não exclui o texto.
  11. Clique com o botão direito do mouse na caixa de texto e clique em Recortar . Observe que o texto é excluído.
back to the top

Subclasse um formulário

  1. Para criar um novo Visual translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005 Windows Application chamado SubclassingDemo, execute essas etapas:
    1. Inicie o Microsoft Visual Studio .NET ou Microsoft Visual Studio 2005.
    2. No menu arquivo , aponte para novo e, em seguida, clique em projetos .
    3. Clique em projetos do Visual translation from VPE for Csharp em Tipos de projeto e, em seguida, clique em Windows Application em modelos .
      Observação No Visual Studio 2005, clique em translation from VPE for Csharp Visual em Tipos de projeto .
    4. Na caixa de texto nome , digite SubclassingDemo .
  2. Edite o código de Form1.cs da seguinte maneira:
    1. Adicione a instrução a seguir na parte superior do código do Form1:
      using System.Windows.Forms;
    2. Expanda a região que está marcada como a seguir:
       Windows Form Designer generated code
    3. Substitua WndProc herdada. Para fazer isso, adicione o procedimento Substituir WndProc void à classe Form1 da seguinte maneira:
      public class Form1 : System.Windows.Forms.Form{   #region Windows Form Designer generated code   protected override void WndProc(ref System.Windows.Forms.Message m)   {       // Perform whatever custom processing you must have for this message.       System.Diagnostics.Debug.WriteLine(m.ToString());       //Forward message to base WndProc.       base.WndProc(ref m);   }	  #endregion}
back to the top

Subclasse qualquer HWND

  1. Adicione um novo módulo de classe chamado SubclassHWND.cs para o aplicativo translation from VPE for Csharp .NET ou Visual translation from VPE for Csharp 2005 Visual. Para fazer isso, clique em Add Class no menu projeto .
  2. Na caixa de texto nome , digite SubclassHWND.cs e, em seguida, clique em Abrir .
  3. Substitua o código de classe SubclassHWND com o código a seguir:
    public class SubclassHWND : NativeWindow  {   protected override void WndProc(ref Message m)    {      // Perform whatever custom processing you must have for this message      System.Diagnostics.Debug.WriteLine(m.ToString());     // forward message to base WndProc     base.WndProc(ref m);    }}
  4. Para demonstrar seu uso, adicione o seguinte código ao evento Load do Form1 :
    SubclassHWND s = new SubclassHWND();s.AssignHandle(this.Handle);//Now s should be listening to the messages of the form.
back to the top

Solucionar problemas

Gancho global deve adicionar próprio em vários processos que esses processos exigem uma função válida e consistente para chamar. Código gerenciado não tem nenhum conceito de um valor consistente para ponteiros de função, pois esses ponteiros de função são proxies que são criados de forma dinâmica.
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:
320584COMO: Interceptação teclas controles .NET usando o Visual translation from VPE for Csharp .NET
back to the top

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 815775 - Última Revisão: 12/11/2006 21:00:56 - Revisão: 2.4

Microsoft Visual C# .NET 2002 Standard Edition, Microsoft Visual C# .NET 2003 Standard Edition, Microsoft Visual C# 2005 Express Edition

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