MFC を使用すると、アプリケーションのユーザーはキーボードとマウスの入力を処理する方法をカスタマイズできます。 ユーザーは、コマンドにキーボード ショートカットを割り当てることで、キーボード入力をカスタマイズできます。 ユーザーは、アプリケーションの特定のウィンドウ内をダブルクリックしたときに実行するコマンドを選択して、マウス入力をカスタマイズすることもできます。 このトピックでは、アプリケーションの入力をカスタマイズする方法について説明します。
[ カスタマイズ ] ダイアログ ボックスでは、ユーザーはマウスとキーボードのカスタム コントロールを変更できます。 このダイアログ ボックスを表示するには、[表示] メニューの [カスタマイズ] をポイントし、[ツール バーとドッキング] をクリックします。 ダイアログ ボックスで、[ キーボード ] タブまたは [ マウス ] タブをクリックします。
キーボードのカスタマイズ
次の図は、[カスタマイズ] ダイアログ ボックスの [キーボード] タブを示しています。
[
[キーボードのカスタマイズ] タブ
ユーザーはキーボード タブを操作して、1 つまたは複数のキーボード ショートカットをコマンドに割り当てます。 使用可能なコマンドは、タブの左側に一覧表示されます。ユーザーは、メニューから使用可能な任意のコマンドを選択できます。 キーボード ショートカットに関連付けることができるのは、メニュー コマンドだけです。 ユーザーが新しいショートカットを入力すると、[ 割り当て ] ボタンが有効になります。 ユーザーがこのボタンをクリックすると、選択したコマンドがそのショートカットに関連付けられます。
現在割り当てられているすべてのキーボード ショートカットが、右側の列のリスト ボックスに表示されます。 ユーザーは、個々のショートカットを選択して削除したり、アプリケーションのすべてのマッピングをリセットしたりすることもできます。
アプリケーションでこのカスタマイズをサポートする場合は、 CKeyboardManager オブジェクトを作成する必要があります。
CKeyboardManager
オブジェクトを作成するには、CWinAppEx::InitKeyboardManager 関数を呼び出します。 このメソッドは、キーボード マネージャーを作成して初期化します。 キーボード マネージャーを手動で作成する場合でも、 CWinAppEx::InitKeyboardManager
を呼び出して初期化する必要があります。
ウィザードを使用してアプリケーションを作成すると、ウィザードによってキーボード マネージャーが初期化されます。 アプリケーションがキーボード マネージャーを初期化すると、フレームワークによって [カスタマイズ] ダイアログ ボックスに [キーボード] タブが追加されます。
マウスのカスタマイズ
次の図は、[カスタマイズ] ダイアログ ボックスの [マウス] タブを示しています。
[マウスのカスタマイズ] タブ
ユーザーはこのタブを操作して、マウスのダブルクリック アクションにメニュー コマンドを割り当てます。 ユーザーは、ウィンドウの左側からビューを選択し、右側のコントロールを使用して、コマンドをダブルクリック アクションに関連付けます。 ユーザーが [ 閉じる] をクリックすると、ユーザーがビュー内の任意の場所をダブルクリックするたびに、関連付けられたコマンドが実行されます。
既定では、ウィザードを使用してアプリケーションを作成する場合、マウスのカスタマイズは有効になりません。
マウスのカスタマイズを有効にするには
CWinAppEx::InitMouseManager を呼び出して CMouseManager オブジェクトを初期化します。
CWinAppEx::GetMouseManager を使用してマウス マネージャーへのポインターを取得します。
CMouseManager::AddView メソッドを使用して、マウス マネージャーにビューを追加します。 これは、マウス マネージャーに追加するすべてのビューに対して行います。
アプリケーションがマウス マネージャーを初期化すると、フレームワークによって [カスタマイズ] ダイアログ ボックスに [マウス] タブが追加されます。 ビューを追加しない場合、タブにアクセスするとハンドルされない例外が発生します。 ビューの一覧を作成すると、ユーザーが [マウス ] タブを使用できるようになります。
マウス マネージャーに新しいビューを追加するときに、一意の ID を指定します。 ウィンドウのマウスのカスタマイズをサポートする場合は、WM_LBUTTONDBLCLICK メッセージを処理し、 CWinAppEx::OnViewDoubleClick 関数を呼び出す必要があります。 この関数を呼び出すとき、パラメーターの 1 つは、そのウィンドウの ID です。 プログラマは、ID 番号とそれらに関連付けられているオブジェクトを追跡する必要があります。
セキュリティに関する懸念事項
ユーザー定義ツールで説明されているように、ユーザーはユーザー定義ツール ID をダブルクリック イベントに関連付けることができます。 ユーザーがビューをダブルクリックすると、アプリケーションは関連付けられている ID と一致するユーザー ツールを探します。 アプリケーションで一致するツールが見つかると、ツールが実行されます。 アプリケーションで一致するツールが見つからない場合は、ダブルクリックされたビューに ID を含むWM_COMMAND メッセージが送信されます。
カスタマイズされた設定はレジストリに格納されます。 レジストリを編集することで、攻撃者は有効なユーザー ツール ID を任意のコマンドに置き換えることができます。 ユーザーがビューをダブルクリックすると、攻撃者が設定したコマンドがビューによって処理されます。 これにより、予期しない危険な動作が発生する可能性があります。
さらに、この種の攻撃は、ユーザー インターフェイスのセーフガードをバイパスできます。 たとえば、アプリケーションで印刷が無効になっているとします。 つまり、ユーザー インターフェイスでは、[ 印刷 ] メニューとボタンは使用できません。 通常、これにより、アプリケーションが印刷できなくなります。 しかし、攻撃者がレジストリを編集した場合、使用できないユーザー インターフェイス要素をバイパスして、ビューをダブルクリックすることで、ユーザーが直接印刷コマンドを送信する可能性があります。
この種の攻撃から保護するには、コマンドが実行される前に有効であることを確認するコードをアプリケーション コマンド ハンドラーに追加します。 コマンドがアプリケーションに送信されないようにするには、ユーザー インターフェイスに依存しないでください。
こちらも参照ください
MFC のカスタマイズ
CKeyboardManager クラス
CMouseManager クラス
カスタマイズのセキュリティへの影響