アクセラレータを動作させるのに問題があります。私はC++を使用しています。
ウィンドウがセットアップされて表示された後。
MENUITEMINFOW mAbout;
mAbout.cbSize = sizeof(MENUITEMINFO);
mAbout.fMask = MIIM_TYPE | MIIM_ID;
mAbout.wID = (UINT) ID_ABOUT;
mAbout.fType = MFT_STRING;
mAbout.dwTypeData = (LPWSTR)L"&About";
InsertMenuItemW(HelpMenu, 0, TRUE, &mAbout);
私のメニューは問題なく機能しており、「About」ボックスを呼び出していますが、問題はありません。
ここで、メッセージループの前に、アクセラレータをロードします。
// Load accelerators.
HACCEL hAccelerators = LoadAcceleratorsW(hInstance, MAKEINTRESOURCEW(IDR_ACCELERATOR));
次に、私のメインメッセージループ:
while(GetMessageW(&msg, NULL, 0, 0) > 0) {
if (! TranslateAcceleratorW(msg.hwnd, hAccelerators, &msg)) {
TranslateMessage(&msg);
DispatchMessageW(&msg);
}
}
私のWndProcメッセージハンドル(ここでも、メニューから機能します)
case WM_COMMAND: {
if (HIWORD(wParam) == 0) {
if (LOWORD(wParam) == 101) {
testDialog(hInstance ,hWnd,(LPSTR)"Testing");
}
if (LOWORD(wParam) == ID_ABOUT) {
DialogBox(hInstance, MAKEINTRESOURCE(IDD_ABOUTDIALOG), hWnd, &AboutDialogProc);
return 0;
}
}
break;
}
私のresource.rcファイル:
//
// Accelerator resources
//
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDR_ACCELERATOR ACCELERATORS
{
"a", ID_ABOUT, VIRTKEY, ALT
}
と私のresource.hファイル:
#define IDR_ACCELERATOR 122
#define ID_ABOUT 401
そして...まあ、Alt-aはaboutボックスを表示しません。私はマイクロソフトのWebサイト全体を歩き回り、さまざまな注意を払っていましたが、私が行っている明白なことは何も見つかりません。
私はWindows7(64ビット)でMinGWを使用しており、Unicode用のアプリケーションでコンパイルしています。
他のすべては機能しますが、これ、私は何が欠けていますか?