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

Definition

Definiert die allgemeine Dialogfeld-Hook-Prozedur, die überschrieben wird, um einem allgemeinen Dialogfeld bestimmte Funktionen hinzuzufügen.

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

Parameter

hWnd
IntPtr

nativeint

Das Handle für das Dialogfeldfenster.

msg
Int32

Die empfangene Nachricht.

wparam
IntPtr

nativeint

Weitere Informationen zur Nachricht.

lparam
IntPtr

nativeint

Weitere Informationen zur Nachricht.

Gibt zurück

IntPtr

nativeint

Ein Nullwert, wenn die Standarddialogfeldprozedur die Nachricht verarbeitet; Ein Wert ungleich Null, wenn die Standarddialogfeldprozedur die Meldung ignoriert.

Beispiele

Im folgenden Codebeispiel wird das Überschreiben der HookProc Methode veranschaulicht. Das Beispiel besteht aus einer Klasse, die die CommonDialog Klasse erbt. In der HookProc Außerkraftsetzung der Klasse wertet das Beispiel den msg-Parameter der Methode anhand konstanter Werte für bestimmte Windows Nachrichten aus. Wenn der parameter msg der angegebenen Konstante entspricht, schreibt das Beispiel die Ablaufverfolgungsausgabe, die die Windows Nachricht identifiziert, die an die methode HookProc übergeben wurde. In diesem Beispiel wird davon ausgegangen, dass die Klasse, in der die HookProc Methode deklariert wird, die CommonDialog Klasse erbt.

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

Hinweise

Eine Hook-Prozedur ist ein Mechanismus, mit dem eine Funktion Ereignisse abfangen kann, bevor sie eine Anwendung erreichen. Wenn Sie die HookProc Methode für eine CommonDialog Klasse außer Kraft setzen, ruft das Betriebssystem die Außerkraftsetzung der Funktion auf, um Betriebssystemmeldungen an das Fenster zu senden.

Standardmäßig zentriert die Hook-Prozedur das Dialogfeld auf dem Bildschirm als Reaktion auf eine WM_INITDIALOG Nachricht.

Hinweise für Vererber

Durch das Erben von Klassen kann diese Methode außer Kraft gesetzt werden, um einem allgemeinen Dialogfeld bestimmte Funktionen hinzuzufügen. Achten Sie beim Überschreiben HookProc(IntPtr, Int32, IntPtr, IntPtr) in einer abgeleiteten Klasse darauf, die Methode der Basisklasse HookProc(IntPtr, Int32, IntPtr, IntPtr) aufzurufen.

Gilt für: