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

Definitie

Hiermee definieert u de algemene dialoogvensterhookprocedure die wordt overschreven om specifieke functionaliteit toe te voegen aan een algemeen dialoogvenster.

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

Parameters

hWnd
IntPtr

nativeint

De greep naar het dialoogvenstervenster.

msg
Int32

Het bericht dat wordt ontvangen.

wparam
IntPtr

nativeint

Aanvullende informatie over het bericht.

lparam
IntPtr

nativeint

Aanvullende informatie over het bericht.

Retouren

IntPtr

nativeint

Een nulwaarde als de standaarddialoogvensterprocedure het bericht verwerkt; een niet-nulwaarde als de standaarddialoogvensterprocedure het bericht negeert.

Voorbeelden

In het volgende codevoorbeeld ziet u hoe u de HookProc methode overschrijft. Het voorbeeld bestaat uit een klasse die de CommonDialog klasse over neemt. In de HookProc van de klasse wordt in het voorbeeld de parameter msg van de methode geƫvalueerd op basis van constante waarden voor bepaalde Windows berichten. Als de parameter msg gelijk is aan de opgegeven constante, schrijft het voorbeeld traceringsuitvoer die het Windows bericht identificeert dat is doorgegeven aan de methode HookProc. In dit voorbeeld wordt ervan uitgegaan dat de klasse waarin de HookProc methode wordt gedeclareerd, de CommonDialog klasse overneemt.

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

Opmerkingen

Een hookprocedure is een mechanisme waarmee een functie gebeurtenissen kan onderscheppen voordat ze een toepassing bereiken. Wanneer u de HookProc methode voor een CommonDialog klasse overschrijft, roept het besturingssysteem uw onderdrukking van de functie aan om berichten van het besturingssysteem naar het venster te posten.

De haakprocedure centreert standaard het dialoogvenster op het scherm als reactie op een WM_INITDIALOG bericht.

Notities voor overnemers

Het overnemen van klassen kan deze methode overschrijven om specifieke functionaliteit toe te voegen aan een algemeen dialoogvenster. Wanneer u HookProc(IntPtr, Int32, IntPtr, IntPtr) overschrijft in een afgeleide klasse, moet u de methode van HookProc(IntPtr, Int32, IntPtr, IntPtr) de basisklasse aanroepen.

Van toepassing op