2021年8月10日火曜日

プログラミング ショートカットキーの実装


四連休にしたので
プログラミングしてみようかなと
長男もこの連休でプログラム書くようなことを言ってたのでちょっとだけ触発されたのさ

自作のソフトでショートカットを実装したんだけどうまくいかなくてしばらく放置してたんだけど、VSのデバッガモードで丹念にトレースしてようやくバグが分かった
すっきりしてすごく気持ちいい( ´∀`)

そうしたなかでアクセラレータの知識も少し深まった
ショートカットキーを実装するのにアクセラレータを使うってことを知ったのは最近
昔は WM_Keydown を使って分岐してた
まあこれでも動くんだけど、リソースのアクセラレータを使ったほうが簡単
この場合 winmain のメッセージループを下のように書く

    while (GetMessage(&msg, NULL, 0, 0) > 0) {
        if (TranslateAccelerator(msg.hwnd, hAccTable, &msg) == 0) {  
            TranslateMessage(&msg);   
            DispatchMessage(&msg);
        }
    }

TranslateAccelerator でショートカットキーがあればその処理を優先させる
この引数で msg.hwnd は hMainwindow にもできる
そうなるとメインのメッセージルーチンでキーをゲットできるんですね

VSを使って入るけど結局++ではなくてCで書いてる私
ここら辺の仕組みは++だとどう書くんだろう
あと、#は??
同じかな、違うのかな?

0 件のコメント:

コメントを投稿