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

Definicja

Definiuje wspólną procedurę haka okna dialogowego, która została zastąpiona w celu dodania określonych funkcji do wspólnego okna dialogowego.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

Parametry

hWnd
IntPtr

Uchwyt do okna dialogowego.The handle to the dialog box window.

msg
Int32

Odebrany komunikat.The message being received.

wparam
IntPtr

Dodatkowe informacje o komunikacie.Additional information about the message.

lparam
IntPtr

Dodatkowe informacje o komunikacie.Additional information about the message.

Zwraca

IntPtr

Wartość zerowa, jeśli domyślna procedura okna dialogowego przetwarza komunikat; wartość różna od zera, jeśli domyślna procedura okna dialogowego ignoruje komunikat.A zero value if the default dialog box procedure processes the message; a nonzero value if the default dialog box procedure ignores the message.

Przykłady

Poniższy przykład kodu demonstruje, jak zastąpić HookProc metodę.The following code example demonstrates how to override the HookProc method. Przykład składa się z klasy, która dziedziczy CommonDialog klasę.The example consists of a class that inherits the CommonDialog class. W HookProc przesłonięciu klasy przykład szacuje msg parametr metody względem wartości stałych dla konkretnych komunikatów systemu Windows.In the class's HookProc override, the example evaluates the method's msg parameter against constant values for particular Windows messages. Jeśli msg parametr jest równy podanej stałej, przykład zapisuje wyniki śledzenia identyfikujące komunikat systemu Windows, który został przesłany do HookProc metody.If the msg parameter equals the specified constant, the example writes trace output identifying the Windows message that was passed to the HookProc method. W tym przykładzie przyjęto założenie, że Klasa, w której HookProc Metoda jest zadeklarowana, dziedziczy CommonDialog klasę.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

Uwagi

Procedura Hook jest mechanizmem, za pomocą którego funkcja może przechwycić zdarzenia przed osiągnięciem aplikacji.A hook procedure is a mechanism by which a function can intercept events before they reach an application. W przypadku zastąpienia HookProc metody CommonDialog klasy system operacyjny wywołuje przesłonięcie funkcji w celu publikowania komunikatów systemu operacyjnego do okna.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.

Domyślnie procedura Hook Wyśrodkowuje okno dialogowe na ekranie w odpowiedzi na komunikat WM_INITDIALOG.By default, the hook procedure centers the dialog box on the screen in response to a WM_INITDIALOG message.

Uwaga

Ta metoda SecurityAction.LinkDemand jest używana do zapobiegania wywoływaniu z niezaufanego kodu; tylko bezpośredni obiekt wywołujący musi mieć SecurityPermissionAttribute.UnmanagedCode uprawnienia.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. Jeśli kod można wywołać z częściowo zaufanego kodu, nie przekazuj danych wejściowych użytkownika do Marshal metod klasy bez weryfikacji.If your code can be called from partially trusted code, do not pass user input to Marshal class methods without validation. Aby uzyskać ważne ograniczenia dotyczące korzystania z LinkDemand elementu członkowskiego, zobacz temat Demand a LinkDemand.For important limitations on using the LinkDemand member, see Demand vs. LinkDemand.

Ta właściwość używa również SecurityAction.InheritanceDemand atrybutu zabezpieczeń; aby przesłonić ten element członkowski, Klasa pochodna musi mieć to CustomPermission uprawnienie.This property also uses the SecurityAction.InheritanceDemand security attribute; to override this member, the derived class must have the CustomPermission permission.

Uwagi dotyczące dziedziczenia

Klasy dziedziczenia mogą przesłaniać tę metodę w celu dodania określonych funkcji do wspólnego okna dialogowego.Inheriting classes can override this method to add specific functionality to a common dialog box. Podczas zastępowania HookProc(IntPtr, Int32, IntPtr, IntPtr) w klasie pochodnej należy wywołać metodę klasy bazowej HookProc(IntPtr, Int32, IntPtr, IntPtr) .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.

Dotyczy