次の方法で共有


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 セキュリティ:

参照

CommonDialog クラス | CommonDialog メンバ | System.Windows.Forms 名前空間