Fという文字が追加されたりなどして、キーボードから項目へのアクセスが可能でした。項目へのアクセスにはアクセラレータキーでも行うことができます。明示的にメニューを開かず項目へアクセスすることができます。反応するものですから、まずはその組み合わせを定義しなければなりません。CreateAcceleratorTableで作成することになります。cEntries);lpacclは、アクセラレータテーブルの内容を表すACCEL構造体の配列を指定します。この配列1つずつの要素にキーの組み合わせを格納することになります。cEntriesは、ACCEL構造体の配列の要素数を指定します。戻り値のHACCEL型は、アクセラレータテーブルのハンドルとなります。ACCEL構造体は、次のように定義されています。*LPACCEL;fVirtは、アクセラレータキーの修飾子として働かせるキーを示す定数を指定します。次の表の中から、1つ又は複数を選択することになります。Altキーを修飾子とする。Ctrlキーを修飾子とする。Shiftキーを修飾子とする。この定数を指定した場合、keyメンバは仮想キーコードと解釈される。keyは、アクセラレータキーとして働かせるキーを指定します。そのwParamの下位ワードとする値を指定します。アクセラレータキーの押下が項目へのアクセスと関連付けられることになります。アクセラレータキーによって生成されたことを示すため常に1という値になります。アクセラレータキーの押下をWM_COMMANDに変換しなければなりません。この作業は、TranslateAcceleratorが行います。lpMsg);hWndは、WM_COMMANDを受け取るウインドウのハンドルを指定します。hAccTableは、アクセラレータテーブルのハンドルを指定します。lpMsgは、MSG構造体のアドレスを指定します。他の意味が込められてはいけません。ユーザーは普通にAキーを押してしまったと勘違いするかもしれません。DispatchMessageを呼び出さないようにしなくてはなりません。そのようなときには通常のメッセージとして処理することになります。この関数が制御を返した時点でWM_COMMANDは処理されていることになります。アプリケーションが終了する前にDestroyAcceleratorTableで破棄することです。hAccel);hAccelは、アクセラレータテーブルのハンドルを指定します。アクセラレータキーを対応させたものです。TEXT("保存が選択されました。いうようにアクセラレータキーへの対応を示しています。アクセラレータテーブルを作成しなければなりません。次のコードは、WinMainの一部です。ACCEL型の変数のaccelの要素数は2となります。cmdにはその項目の識別子であるID_SAVEを指定します。FCONTROLとFSHIFTを組み合わせて指定することになります。FVIRTKEYは、keyメンバが仮想キーコードであることを示すもので、ここでは0x53としています。この0x53という値は、仮想キーコードのSという文字に相当します。0x41から0x5AまでがAからZに対応しているということは覚えておいてください。