CommonDialog.HookProc(IntPtr, Int32, IntPtr, IntPtr) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Definiuje typową procedurę podłączania okien dialogowych, która jest zastępowana w celu dodania określonych funkcji do wspólnego okna dialogowego.
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
nativeint
Uchwyt okna dialogowego.
- msg
- Int32
Odebrana wiadomość.
- wparam
-
IntPtr
nativeint
Dodatkowe informacje o wiadomości.
- lparam
-
IntPtr
nativeint
Dodatkowe informacje o wiadomości.
Zwraca
-
IntPtr
nativeint
Wartość zero, jeśli domyślna procedura okna dialogowego przetwarza komunikat; wartość niezerowa, jeśli domyślna procedura okna dialogowego ignoruje komunikat.
Przykłady
W poniższym przykładzie kodu pokazano, jak zastąpić metodę HookProc . Przykład składa się z klasy, która dziedziczy klasę CommonDialog . W przesłonięciu klasy HookProc przykład oblicza parametr metody msg
względem wartości stałych dla określonych komunikatów Windows. msg
Jeśli parametr jest równy określonej stałej, przykład zapisuje dane wyjściowe śledzenia identyfikujące Windows komunikat, który został przekazany do HookProc metody. W tym przykładzie przyjęto założenie, że klasa, w której HookProc zadeklarowana jest metoda, dziedziczy klasę CommonDialog .
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
Uwagi
Procedura zaczepienia to mechanizm, za pomocą którego funkcja może przechwytywać zdarzenia przed dotarciem do aplikacji. Po zastąpieniu HookProc metody dla CommonDialog klasy system operacyjny wywołuje zastąpienie funkcji w celu opublikowania komunikatów systemu operacyjnego w oknie.
Domyślnie procedura haka wyśrodkuje okno dialogowe na ekranie w odpowiedzi na WM_INITDIALOG
komunikat.
Uwagi dotyczące dziedziczenia
Dziedziczenie klas może zastąpić tę metodę, aby dodać określone funkcje do wspólnego okna dialogowego. Podczas zastępowania HookProc(IntPtr, Int32, IntPtr, IntPtr) w klasie pochodnej należy wywołać metodę klasy bazowej HookProc(IntPtr, Int32, IntPtr, IntPtr) .