CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) Method

Definición

Define el procedimiento de enlace para cuadros de diálogo comunes que se reemplaza para agregar una funcionalidad específica a un cuadro de diálogo común.Defines the common dialog box hook procedure that is overridden to add specific functionality to a common dialog box.

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 IntPtr IntPtr IntPtr

Identificador de la ventana de cuadro de diálogo.The handle to the dialog box window.

msg
Int32 Int32 Int32 Int32

Mensaje que se recibe.The message being received.

wparam
IntPtr IntPtr IntPtr IntPtr

Información adicional acerca del mensaje.Additional information about the message.

lparam
IntPtr IntPtr IntPtr IntPtr

Información adicional acerca del mensaje.Additional information about the message.

Devoluciones

El valor será cero si el procedimiento de cuadro de diálogo predeterminado procesa el mensaje; será un valor distinto de cero si dicho procedimiento omite el mensaje.A zero value if the default dialog box procedure processes the message; a nonzero value if the default dialog box procedure ignores the message.

Ejemplos

En el ejemplo de código siguiente se muestra cómo HookProc invalidar el método.The following code example demonstrates how to override the HookProc method. El ejemplo consta de una clase que hereda la CommonDialog clase.The example consists of a class that inherits the CommonDialog class. En el reemplazo de HookProc la clase, el ejemplo evalúa el parámetro del msg método con los valores constantes para mensajes de Windows determinados.In the class's HookProc override, the example evaluates the method's msg parameter against constant values for particular Windows messages. Si el msg parámetro es igual a la constante especificada, el ejemplo escribe la salida del seguimiento que identifica el mensaje de Windows HookProc que se pasó al método.If the msg parameter equals the specified constant, the example writes trace output identifying the Windows message that was passed to the HookProc method. En este ejemplo se da por supuesto que la HookProc clase en la que se declara CommonDialog el método hereda la clase.This example assumes that the class in which the HookProc method is declared inherits the CommonDialog class.

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...
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] 
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

Comentarios

Un procedimiento de enlace es un mecanismo por el que una función puede interceptar eventos antes de que lleguen a una aplicación.A hook procedure is a mechanism by which a function can intercept events before they reach an application. Al invalidar el HookProc método para una CommonDialog clase, el sistema operativo invoca la invalidación de la función para enviar mensajes del sistema operativo a la ventana.When you override the HookProc method for a CommonDialog class, the operating system invokes your override of the function to post operating system messages to the window.

De forma predeterminada, el procedimiento de enlace centra el cuadro de diálogo en la pantalla en respuesta a un mensaje WM_INITDIALOG.By default, the hook procedure centers the dialog box on the screen in response to a WM_INITDIALOG message.

Nota

Este método usa SecurityAction.LinkDemand para evitar que se llame desde código que no es de confianza; solo se requiere que el llamador inmediato SecurityPermissionAttribute.UnmanagedCode tenga permiso.This method uses SecurityAction.LinkDemand to prevent it from being called from untrusted code; only the immediate caller is required to have SecurityPermissionAttribute.UnmanagedCode permission. Si se puede llamar al código desde código de confianza parcial, no pase datos proporcionados Marshal por el usuario a métodos de clase sin validación.If your code can be called from partially trusted code, do not pass user input to Marshal class methods without validation. Para conocer las limitaciones importantes sobre LinkDemand el uso del miembro, vea Demand frente a LinkDemand.For important limitations on using the LinkDemand member, see Demand vs. LinkDemand.

Esta propiedad también utiliza el SecurityAction.InheritanceDemand atributo de seguridad; para reemplazar este miembro, la clase derivada debe tener CustomPermission el permiso.This property also uses the SecurityAction.InheritanceDemand security attribute; to override this member, the derived class must have the CustomPermission permission.

Notas a los desarrolladores de herederos

Las clases herederas pueden invalidar este método para agregar una funcionalidad específica a un cuadro de diálogo común.Inheriting classes can override this method to add specific functionality to a common dialog box. Al reemplazar HookProc(IntPtr, Int32, IntPtr, IntPtr) en una clase derivada, asegúrese de llamar al método de HookProc(IntPtr, Int32, IntPtr, IntPtr) la clase base.When overriding HookProc(IntPtr, Int32, IntPtr, IntPtr) in a derived class, be sure to call the base class's HookProc(IntPtr, Int32, IntPtr, IntPtr) method.

Seguridad

SecurityPermission
para que el llamador inmediato llame a código no administrado.for the immediate caller to call unmanaged code. Enumeración asociada:UnmanagedCodeAssociated enumeration: UnmanagedCode

Se aplica a