質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.49%

ACCELERATORSでアクセラレーターを実装したい

受付中

回答 0

投稿

  • 評価
  • クリップ 0
  • VIEW 467

score 19

windows apiを現在勉強中です。
タイトルにもある通りacceleratotsを使いたいのですがエラーが出てしまいます。
前回もstringtableを使用しようとしたところエラーが出ました。

スクリプトは以下の通りです。

/*リソーススクリプト*/
#include "resource.h"

KITTY MENU {
    POPUP "Kitty on your lap(&K)" {
        MENUITEM "レナ(&R)\tCtrl+R" , IDM_RENA
        MENUITEM "ユキ(&Y)\tShift + Y" , IDM_YUKI
        MENUITEM "ミミ(&M)\tm" , IDM_MIMI
    }
}

KITTY ACCELERATORS {
    "^R" ,         IDM_RENA
    VK_END ,    IDM_RENA , VIRTKEY , SHIFT

    0x59 ,         IDM_YUKI , ASCII
    VK_HOME ,    IDM_YUKI , VIRTKEY

    "m" ,        IDM_MIMI
    VK_F1 ,     IDM_MIMI , VIRTKEY , ALT , CONTROL
}
// source.c
#include <windows.h>
#include "resource.h"

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) {
    switch (msg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        return 0;
    case WM_COMMAND:
        switch (LOWORD(wp)) {
        case IDM_RENA:
            SetClassLong(hwnd, GCLP_HBRBACKGROUND,
                (LONG)CreateSolidBrush(RGB(0xFF, 0, 0))
            );
            break;
        case IDM_YUKI:
            SetClassLong(hwnd, GCLP_HBRBACKGROUND,
                (LONG)CreateSolidBrush(RGB(0, 0, 0xFF))
            );
            break;
        case IDM_MIMI:
            SetClassLong(hwnd, GCLP_HBRBACKGROUND,
                (LONG)CreateSolidBrush(RGB(0xFF, 0xAA, 0))
            );
        }
        InvalidateRect(hwnd, NULL, TRUE);
        return 0;
    }
    return DefWindowProc(hwnd, msg, wp, lp);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
    PSTR lpCmdLine, int nCmdShow) {
    HWND hwnd;
    HACCEL haccel;
    MSG msg;
    WNDCLASS winc;

    winc.style = CS_HREDRAW | CS_VREDRAW;
    winc.lpfnWndProc = WndProc;
    winc.cbClsExtra = winc.cbWndExtra = 0;
    winc.hInstance = hInstance;
    winc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    winc.hCursor = LoadCursor(NULL, IDC_ARROW);
    winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    winc.lpszMenuName = TEXT("KITTY");
    winc.lpszClassName = TEXT("KITTY");

    if (!RegisterClass(&winc)) return -1;

    hwnd = CreateWindow(
        TEXT("KITTY"), TEXT("Kitty on your lap"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE,
        CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL,
        hInstance, NULL
    );

    if (hwnd == NULL) return -1;

    haccel = LoadAccelerators(hInstance, TEXT("KITTY"));

    while (GetMessage(&msg, NULL, 0, 0)) {
        if (!TranslateAccelerator(hwnd, haccel, &msg)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }
    return msg.wParam;
}
// resource.h
#define IDM_RENA 40001
#define IDM_YUKI 40002
#define IDM_MIMI 40003

エラー内容は以下の通りです。

重大度レベル    コード    説明    プロジェクト    ファイル    行    抑制状態
エラー    RC2104    undefined keyword or key name: VK_END    windowsProject 20200103    C:\Users\user\source\repos\windowsProject 20200103\windowsProject 20200103\Resource.rc    14    

自分的に.rcのアクセラレータのところの記述が間違っているのはわかるのですがどう書き換えていいかわかりません。

ご回答よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • tatamyiwathy

    2020/01/14 15:53

    開発環境はなんですか?Visual Studioですか?

    キャンセル

  • daiking

    2020/01/14 16:18

    すみません。vsです。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る