Partilhar via


CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) Método

Definição

Define o procedimento de gancho de caixa de diálogo comum que é substituído para adicionar uma funcionalidade específica a uma caixa de diálogo comum.

protected:
 virtual IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
protected virtual IntPtr HookProc (IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
abstract member HookProc : nativeint * int * nativeint * nativeint -> nativeint
override this.HookProc : nativeint * int * nativeint * nativeint -> nativeint
Protected Overridable Function HookProc (hWnd As IntPtr, msg As Integer, wparam As IntPtr, lparam As IntPtr) As IntPtr

Parâmetros

hWnd
IntPtr

nativeint

O identificador para a janela da caixa de diálogo.

msg
Int32

A mensagem que está sendo recebida.

wparam
IntPtr

nativeint

Informações adicionais sobre a mensagem.

lparam
IntPtr

nativeint

Informações adicionais sobre a mensagem.

Retornos

IntPtr

nativeint

Um valor de zero se o procedimento de caixa de diálogo padrão processar a mensagem; um valor diferente de zero se o procedimento de caixa de diálogo padrão ignorar a mensagem.

Exemplos

O exemplo de código a seguir demonstra como substituir o HookProc método. O exemplo consiste em uma classe que herda a CommonDialog classe. Na substituição da HookProc classe, o exemplo avalia o parâmetro do msg método em relação a valores constantes para mensagens Windows específicas. Se o msg parâmetro for igual à constante especificada, o exemplo gravará a saída de rastreamento identificando a mensagem Windows que foi passada para o HookProc método. Este exemplo pressupõe que a classe na qual o HookProc método é declarado herda a CommonDialog classe.

private:
   // Defines the constants for Windows messages.
   literal int WM_SETFOCUS = 0x0007;
   literal int WM_INITDIALOG = 0x0110;
   literal int WM_LBUTTONDOWN = 0x0201;
   literal int WM_RBUTTONDOWN = 0x0204;
   literal int WM_MOVE = 0x0003;

protected:
   // Overrides the base class hook procedure...
   [SecurityPermission(SecurityAction::Demand, Flags=SecurityPermissionFlag::UnmanagedCode)] 
   virtual IntPtr HookProc( IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam ) override
   {
      // Evaluates the message parameter to determine the user action.
      #if defined(TRACE)
      switch ( msg )
      {
         case WM_INITDIALOG:
            System::Diagnostics::Trace::Write( "The WM_INITDIALOG message was received." );
            break;
         case WM_SETFOCUS:
            System::Diagnostics::Trace::Write( "The WM_SETFOCUS message was received." );
            break;
         case WM_LBUTTONDOWN:
            System::Diagnostics::Trace::Write( "The WM_LBUTTONDOWN message was received." );
            break;
         case WM_RBUTTONDOWN:
            System::Diagnostics::Trace::Write( "The WM_RBUTTONDOWN message was received." );
            break;
         case WM_MOVE:
            System::Diagnostics::Trace::Write( "The WM_MOVE message was received." );
            break;
      }
      #endif
     
      // Always call the base class hook procedure.
      return FontDialog::HookProc( hWnd, msg, wParam, lParam );
   }

// Defines the constants for Windows messages.

const int WM_SETFOCUS = 0x0007;
const int WM_INITDIALOG = 0x0110;
const int WM_LBUTTONDOWN = 0x0201;
const int WM_RBUTTONDOWN = 0x0204;
const int WM_MOVE = 0x0003;

// Overrides the base class hook procedure...
protected override IntPtr HookProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam)
{
    // Evaluates the message parameter to determine the user action.

    switch(msg)
    {

        case WM_INITDIALOG:
            System.Diagnostics.Trace.Write("The WM_INITDIALOG message was received.");
            break;
        case WM_SETFOCUS:
            System.Diagnostics.Trace.Write("The WM_SETFOCUS message was received.");
            break;
        case WM_LBUTTONDOWN:
            System.Diagnostics.Trace.Write("The WM_LBUTTONDOWN message was received.");
            break;
        case WM_RBUTTONDOWN:
            System.Diagnostics.Trace.Write("The WM_RBUTTONDOWN message was received.");
            break;
        case WM_MOVE:
            System.Diagnostics.Trace.Write("The WM_MOVE message was received.");
            break;
    }

    // Always call the base class hook procedure.

    return base.HookProc(hWnd, msg, wParam, lParam);
}
    ' Defines the constants for Windows messages.

    Const WM_SETFOCUS = &H7
    Const WM_INITDIALOG = &H110
    Const WM_LBUTTONDOWN = &H201
    Const WM_RBUTTONDOWN = &H204
    Const WM_MOVE = &H3
<System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Protected Overrides Function HookProc(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr


        ' Evaluates the message parameter to determine the user action.

        Select Case msg

            Case WM_INITDIALOG
                System.Diagnostics.Trace.Write("The WM_INITDIALOG message was received.")
            Case WM_SETFOCUS
                System.Diagnostics.Trace.Write("The WM_SETFOCUS message was received.")
            Case WM_LBUTTONDOWN
                System.Diagnostics.Trace.Write("The WM_LBUTTONDOWN message was received.")
            Case WM_RBUTTONDOWN
                System.Diagnostics.Trace.Write("The WM_RBUTTONDOWN message was received.")
            Case WM_MOVE
                System.Diagnostics.Trace.Write("The WM_MOVE message was received.")

        End Select

        ' Always call the base class hook procedure.

        Return MyBase.HookProc(hWnd, msg, wParam, lParam)

    End Function

Comentários

Um procedimento de gancho é um mecanismo pelo qual uma função pode interceptar eventos antes de chegar a um aplicativo. Quando você substitui o HookProc método para uma CommonDialog classe, o sistema operacional invoca sua substituição da função para postar mensagens do sistema operacional na janela.

Por padrão, o procedimento de gancho centraliza a caixa de diálogo na tela em resposta a uma WM_INITDIALOG mensagem.

Notas aos Herdeiros

A herdação de classes pode substituir esse método para adicionar funcionalidades específicas a uma caixa de diálogo comum. Ao substituir HookProc(IntPtr, Int32, IntPtr, IntPtr) em uma classe derivada, chame o método da HookProc(IntPtr, Int32, IntPtr, IntPtr) classe base.

Aplica-se a