ダイアログ ボックスでは、Visual C でアクセラレータ キーとメイン メニューを使用する方法

文書翻訳 文書翻訳
文書番号: 100770
すべて展開する | すべて折りたたむ

概要

モーダル ダイアログ ボックスをメインとして多くのアプリケーションを使用します。アプリケーションのウィンドウです。この方法を使用するアプリケーションも含めることができます、メイン メニュー、ダイアログ ボックスにします。通常、1 つ以上のメニュー項目を持つ、キーボードのアクセス キーが関連付けられています。手順説明、メニューやキーボード アクセラレータを MFC アプリケーションに追加するために必要なウィザード ダイアログ ボックス ベースのアプリケーション。

詳細

Microsoft の開発は、一般的なアプリケーションVisual C および Microsoft Windows ソフトウェアを使用して、Windows オペレーティング システム開発キット (SDK) やキーボードのアクセラレータの呼び出しを使用して、 TranslateAccelerator() 関数は、メイン メッセージ ループにします。ただし、固有の値を使用すると、ダイアログ ボックスは、アプリケーションのメイン ウィンドウとして、メインのメッセージではありません。ループです。代わりに、アプリケーション (ビルド ダイアログ ボックス マネージャー メッセージ ループを使用してください。Windows) に変換し、メッセージをディスパッチします。もちろん、ためこのメッセージ ループが意図していないのアクセラレータを処理するのには、それを呼び出していないが TranslateAccelerator() 関数です。

固有値のアクセラレータ キーを処理するのにはダイアログ ボックス、MFC では、オーバーライドする必要があります、 CWinApp::ProcessMessageFilter() 関数です。フレームワークによって ProcessMessageFilter() 前に、メッセージを処理します。

MFC を変更するのにはアプリケーション ウィザード ダイアログ ボックス ベースのアプリケーションの種類 Visual C。NETアクセラレータ キーを処理の次の手順を実行します。
  1. Visual Studio で。NET は、新しい MFC アプリケーションを作成します。で、左ペインの [MFC アプリケーション ウィザードをクリックします。 [アプリケーションの種類、ことを確認し、 [アプリケーションの種類 設定されています。 ダイアログ ベース.
  2. [リソース ビュー] を開くには、ダイアログ リソースをダブルクリックします。ダイアログ リソース エディター。ダイアログ リソースのリソース ID に似ていますIDD_ に' MYPROJECT ']_DIALOG (どこ' MYPROJECT '] アプリケーションに付けた名前です。プロジェクト) を作成したとします。
  3. ダイアログ リソースにダイアログ リソースのファイルを開くエディターは、[プロパティ] ウィンドウを探します。ダイアログ ボックスを編集します。 境界線 プロパティを指定し、 シン 境界線のスタイル。ダイアログ ボックスは、この手順が必要です。メニューが含まれています。
  4. 最上位の項目を含む新しいメニュー リソースを作成します。名前 & ファイルしが名前付きアイテム] メニュー & Exit\tCTRL + E (ctrl キーを押しながら X は通常ctrl キーを押しながら E を代わりに使用するためにテキストの切り取り、られています)。
  5. メニュー エディターで、新しく作成したをクリックします。 終了 メニュー項目です。[プロパティ] ウィンドウで確認してください、 ID プロパティは、 終了 メニュー項目を設定するのには ID_FILE_EXIT.
  6. 入力して、ダイアログ ボックスに新しいメニューを関連付ける、ダイアログ リソースのメニュー ID メニュー [プロパティ] します。ダイアログ リソースをダイアログ エディターを開きを検索は、 メニュー [プロパティ] ウィンドウのプロパティです。リソース ID に設定します。でメニューの手順 4 で作成しました。これを行うには、ドロップ ダウン リストでをクリックして、メニュー プロパティの行、およびリソースの ID を選択します、[メニュー] ボックスの一覧です。
  7. メニュー エディターで、右クリックします。 & Exit\tCTRL + E、し イベント ハンドラーを追加します。.
  8. イベント ハンドラー ウィザードで、選択、 コマンド メッセージの種類。で、 クラス リストを選択、 CDialog ハンドラーで生成されるメインのクラスを派生します。いることを確認します。関数ハンドラー名が適切であるしをクリックして 追加し、編集 メニュー項目のイベント ハンドラーを作成します。
  9. 次の行に関数を挿入します。 終了 手順 8 で生成されるメニュー アイテム イベント ハンドラー メソッド。
    PostMessage(WM_COMMAND, IDOK, 0L);
    					
    これをクリックすると同じ結果が生成されます。 [OK] ユーザーがクリックしたとき 終了 で、 ファイル メニューです。クリックすると [OK] ダイアログ ボックス アプリケーションを閉じます。

  10. 新しいアクセラレータ リソースを作成し、ctrl キーを押しながら E を関連付けるキーの組み合わせ ID_FILE_EXIT.変更内容を保存します。
  11. 次のグローバル宣言は、Stdafx.h ファイルを編集するには変数の後、 例を挙げます ステートメント:
    extern HWND    ghDlg;          // Handle to main dialog box.
    extern HACCEL  ghAccelTable;   // Handle to accelerator table.
    					
  12. 含む .cpp ファイルで、 CWinApp 派生クラスの実装 (通常は、.cpp ファイルと同じ基本名、プロジェクト名として)、次のグローバル変数を追加します。初期化:
    HWND    ghDlg = 0;          // Handle to main dialog box.
    HACCEL  ghAccelTable = 0;   // Handle to accelerator table.
    					
  13. メイン CDialog (既定値を実装しません、ダイアログ クラスの派生クラス について ダイアログ ボックス) を検索する、 OnInitDialog() メソッドです。必要に応じて、オーバーライドを追加できるか、 OnInitDialog() メソッドです。これを行うをクリックして、 CDialog 派生クラスでクリックし、[クラス ビュー] ウィンドウで、 オーバーライド [プロパティ] ウィンドウでします。検索、 OnInitDialog 行し、右側の列をクリックします。If OnInitDialog() オーバーライドされないこのクラスを作成することがあります。オーバーライドします。
  14. 以前追加した関数を編集、次のコード行:
    ghDlg = m_hWnd;
    					
  15. 含む .cpp ファイルで、 CWinApp 実装は、派生を検索、 InitInstance() クラスのメソッドです。呼び出すとすぐに次の行を追加します。基本クラスに CWinApp::InitInstance():
    ghAccelTable = LoadAccelerators(AfxGetInstanceHandle(),
    MAKEINTRESOURCE(IDR_ACCELERATOR1));
    					
    メモしますここで使用リソース ID (IDR_ACCELERATOR1) が、ID。アクセラレータ テーブルのリソースをステップに追加します。[10]。

  16. 追加、 CWinApp 派生クラスは、 ProcessMessageFilter() クラスのメソッドです。これには、[クラス ビュー] ウィンドウでの操作を行うには、選択、 CWinApp プロジェクト内の派生クラスです。[プロパティ] ウィンドウで、クリックしてください。 オーバーライド.検索、 ProcessMessageFilter [プロパティ] ウィンドウ内の行し、の一番右の列を選択します。行します。ドロップダウン矢印をクリックし、追加するオプションをクリックします。オーバーライドして、 ProcessMessageFilter メソッドです。
  17. 編集、 ProcessMessageFilter() 次の実装を持つようにメソッドをオーバーライドします。
    BOOL CMyProjectApp::ProcessMessageFilter(int code, LPMSG lpMsg)
           {
              if (code < 0)
                 CWinApp::ProcessMessageFilter(code, lpMsg);
    
              if (ghDlg && ghAccelTable)
                 {
                 if (::TranslateAccelerator(ghDlg, ghAccelTable, lpMsg))
                    return(TRUE);
                 }
    
             return CWinApp::ProcessMessageFilter(code, lpMsg);
          }
    					
  18. コンパイルし、アプリケーションを実行します。メニューがあることに注意してください。クリックすると、 終了 で、 ファイル メニューまたは ctrl キーを押しながら E キーを押して、アプリケーションを閉じるには、必要です。

プロパティ

文書番号: 100770 - 最終更新日: 2011年6月30日 - リビジョン: 5.0
キーワード:?
kbhowto kbmenu kbui kbkeyaccel kbacceleratorkey kbmt KB100770 KbMtja
機械翻訳の免責
重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。
英語版 KB:100770
Microsoft Knowledge Base の免責: Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com