アクセラレータキーについて

[戻る]
お茶 2004/11/10(水) 14:26:55
リソースでアクセラレータを定義したのですが、動作が変なので質問します。

// リソース内
MainMenu ACCELERATORS
{
    "^h",     1000
    "^x",     2000
}

// アプリケーション内
HACCEL hAccel = LoadAccelerators(hInst, "MainMenu");
MSG msg;
while(GetMessage(&msg, 0, 0, 0)){
  if(TranslateAccelerator(hwnd, hAccel, &msg) ==0){
      TranslateMessage(&msg);
      DispatchMessage(&msg);
  }
}
return msg.wParam;

上のようにメッセージループを定義し、Ctrl+Hを押したら置換ダイアログを表示するよう
にWM_COMMANDを書きました。
実際Ctrl+Hでダイアログは表示されるのですが、Backspaceキーを押しただけでもダイア
ログが表示されてしまいます。
Backspaceキーはキーイベントとして必要なのでこれでは困ります。
Ctrl+Hってアクセラレータキーとして使用してはまずいのでしょうか?
Ctrl+HはWM_COMMANDに変換し、Backspaceキーは変換しないようにするにはどうしたらい
いのでしょうか?

環境はWinXPSp2 + VC++6.0SP6 MFC未使用です。

dairygoods 2004/11/10(水) 15:20:14
Ctrl+HもBackspaceも同じASCII文字に変換されるので、
仮想キーコードで判定します。

"H",   1000    VIRTKEY, CONTROL

お茶 2004/11/10(水) 15:54:58
[[解決]]
ありがとうございます。
アドバイスの通りリソースを書き換えたら直りました。

古いスレッドには追加発言できません。