MFCのホットキーコントロールを使うとホットキーの登録をユーザに任せやすくなる。だけど、そのままAPIで登録できるわけではなくて、変換が必要になるので関数にまとめてみました。
ホットキーを登録するとWM_HOTKEYが指定したhWndのウィンドウに送られてきます。
ちなみにホットキー設定画面を出すときにはホットキーを解除しておかないと設定がおかしくなるので注意。
これを使って起こった、いかなる障害において、私は責任を負いませんのであしからず。
// hWnd: WM_HOTKEYの送り先のhWnd
// hotkeyCtrl : MFCのホットキーコントロール
BOOL HotkeyRegist( HWND hWnd , CHotKeyCtrl * hotkeyCtrl , int id)
{
DWORD wHotKey; // ホットキーコントロールの値
WORD wModify; // ホットキーコントロールでのキー修飾子
UINT fsModifiers; // キー修飾子フラグ
UINT vk; // 仮想キーコード
//MFCのホットキーコントロールから値を得る
wHotKey = hotkeyCtrl->GetHotKey();
// キー修飾子を得る
wModify = (WORD)(wHotKey >> 8);
// 特殊キーコードが違うので変換しなければならない
fsModifiers = 0;
// Shiftキーが押されているか
if( wModify & HOTKEYF_SHIFT )
fsModifiers |= MOD_SHIFT;
// Ctrlキーが押されてるか
if( wModify & HOTKEYF_CONTROL )
fsModifiers |= MOD_CONTROL;
// Altキーが押されてるか
if( wModify & HOTKEYF_ALT )
fsModifiers |= MOD_ALT;
// 仮想キーコードを変換
vk = (UINT)LOBYTE(wHotKey);
// ホットキーを登録する
return ::RegisterHotKey( hWnd , id , fsModifiers , vk );
}
BOOL HotKeyUnregist( HWND hWnd , int id)
{
// ホットキーを解除する
return ::UnregisterHotKey( hWnd , id );
}