CommonDialog.HookProc メソッド
コモン ダイアログ ボックスに特定の機能を追加するためにオーバーライドされる、コモン ダイアログ ボックスのフック プロシージャを定義します。
Protected Overridable Function HookProc( _
ByVal hWnd As IntPtr, _ ByVal msg As Integer, _ ByVal wparam As IntPtr, _ ByVal lparam As IntPtr _) As IntPtr
[C#]
protected virtual IntPtr HookProc(IntPtrhWnd,intmsg,IntPtrwparam,IntPtrlparam);
[C++]
protected: virtual IntPtr HookProc(IntPtrhWnd,intmsg,IntPtrwparam,IntPtrlparam);
[JScript]
protected function HookProc(
hWnd : IntPtr,msg : int,wparam : IntPtr,lparam : IntPtr) : IntPtr;
パラメータ
- hWnd
ダイアログ ボックス ウィンドウを識別するハンドル。 - msg
受信しているメッセージ。 - wparam
メッセージについての追加情報。 - lparam
メッセージについての追加情報。
戻り値
既定のダイアログ ボックス プロシージャでメッセージを処理する場合は 0。既定のダイアログ ボックス プロシージャではメッセージを無視する場合は 0 以外。
解説
フック プロシージャにより、イベントがアプリケーションに到達する前に関数がイベントを認識できます。 CommonDialog クラスの HookProc メソッドをオーバーライドすると、オペレーティング システムは関数のオーバーライドを呼び出して、オペレーティング システム メッセージをウィンドウにポストします。
既定では、フック プロシージャは、WM_INITDIALOG メッセージに応答してダイアログ ボックスを画面の中央に配置します。
Note[note] このメソッドは SecurityAction.LinkDemand を使用して、信頼関係のないコードからの呼び出しを防ぎます。 SecurityPermissionAttribute.UnmanagedCode アクセス許可は、直前の呼び出し元にのみ要求されます。信頼性が一部しか確認されていないコードから呼び出すことができるコードの場合、ユーザー入力を検証せずに Marshal クラスに渡すことは避けてください。 LinkDemand メンバの使用に関する重要な制約事項については、「 Demand と LinkDemand 」を参照してください。
このプロパティはまた、 SecurityAction.InheritanceDemand セキュリティ属性も使用します。このメンバをオーバーライドするには、派生クラスが CustomPermission アクセス許可を持っている必要があります。
継承時の注意: 継承クラスでは、コモン ダイアログ ボックスに特定の機能を追加するために、このメソッドをオーバーライドできます。派生クラスで HookProc をオーバーライドする場合は、基本クラスの HookProc メソッドを呼び出してください。
使用例
[Visual Basic, C#, C++] HookProc メソッドをオーバーライドする方法の例を次に示します。この例は CommonDialog クラスを継承するクラスから構成されています。また、クラスの HookProc オーバーライドで、 msg パラメータを Windows メッセージの定数値に対して評価しています。 msg パラメータが指定した定数と等しい場合、 HookProc メソッドに渡された Windows メッセージを識別するトレース出力を書き込みます。また、この例は、 HookProc メソッドが宣言されているクラスが CommonDialog クラスを継承することを前提にしています。
' 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
[C#]
// 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);
}
[C++]
// Defines the constants for Windows messages.
const static int WM_SETFOCUS = 0x0007;
const static int WM_INITDIALOG = 0x0110;
const static int WM_LBUTTONDOWN = 0x0201;
const static int WM_RBUTTONDOWN = 0x0204;
const static int WM_MOVE = 0x0003;
protected:
// Overrides the base class hook procedure...
[System::Security::Permissions::PermissionSet(System::Security::Permissions::SecurityAction::Demand, Name="FullTrust")]
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(S"The WM_INITDIALOG message was received.");
break;
case WM_SETFOCUS:
System::Diagnostics::Trace::Write(S"The WM_SETFOCUS message was received.");
break;
case WM_LBUTTONDOWN:
System::Diagnostics::Trace::Write(S"The WM_LBUTTONDOWN message was received.");
break;
case WM_RBUTTONDOWN:
System::Diagnostics::Trace::Write(S"The WM_RBUTTONDOWN message was received.");
break;
case WM_MOVE:
System::Diagnostics::Trace::Write(S"The WM_MOVE message was received.");
break;
}
// Always call the base class hook procedure.
return FontDialog::HookProc(hWnd, msg, wParam, lParam);
}
[JScript] JScript のサンプルはありません。Visual Basic、C#、および C++ のサンプルを表示するには、このページの左上隅にある言語のフィルタ ボタン をクリックします。
必要条件
プラットフォーム: Windows 98, Windows NT 4.0, Windows Millennium Edition, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003 ファミリ
.NET Framework セキュリティ:
- SecurityPermission (継承クラスがアンマネージ コードを呼び出すために必要なアクセス許可) SecurityPermissionFlag.UnmanagedCode (関連する列挙体)
- SecurityPermission (直前の呼び出し元がアンマネージ コードを呼び出すために必要なアクセス許可) SecurityPermissionFlag.UnmanagedCode (関連する列挙体)
参照
CommonDialog クラス | CommonDialog メンバ | System.Windows.Forms 名前空間