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

Definizione

Definisce la routine di hook della finestra di dialogo comune di cui viene eseguito l'override per aggiungere funzionalità specifiche a una finestra di dialogo comune.

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

Parametri

hWnd
IntPtr

nativeint

Handle per la finestra di dialogo.

msg
Int32

Messaggio che viene ricevuto.

wparam
IntPtr

nativeint

Ulteriori informazioni sul messaggio.

lparam
IntPtr

nativeint

Ulteriori informazioni sul messaggio.

Restituisce

IntPtr

nativeint

Valore uguale a zero se la routine predefinita della finestra di dialogo elabora il messaggio; valore diverso da zero se la routine predefinita della finestra di dialogo ignora il messaggio.

Esempio

Nell'esempio di codice seguente viene illustrato come eseguire l'override del HookProc metodo. L'esempio è costituito da una classe che eredita la CommonDialog classe. Nell'override della HookProc classe, nell'esempio viene valutato il parametro del msg metodo rispetto ai valori costanti per determinati messaggi di Windows. Se il msg parametro è uguale alla costante specificata, l'esempio scrive l'output di traccia che identifica il messaggio di Windows passato al HookProc metodo. In questo esempio si presuppone che la classe in cui il HookProc metodo venga dichiarato eredita la 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

Commenti

Una procedura di hook è un meccanismo in base al quale una funzione può intercettare gli eventi prima di raggiungere un'applicazione. Quando si esegue l'override del metodo per una CommonDialog classe, il sistema operativo richiama l'override HookProc della funzione per inviare messaggi del sistema operativo alla finestra.

Per impostazione predefinita, la procedura di hook centra la finestra di dialogo sullo schermo in risposta a un WM_INITDIALOG messaggio.

Note per gli eredi

L'ereditazione di classi può eseguire l'override di questo metodo per aggiungere funzionalità specifiche a una finestra di dialogo comune. Quando si esegue l'override HookProc(IntPtr, Int32, IntPtr, IntPtr) in una classe derivata, assicurarsi di chiamare il metodo della HookProc(IntPtr, Int32, IntPtr, IntPtr) classe base.

Si applica a