四連休にしたので
プログラミングしてみようかなと
長男もこの連休でプログラム書くようなことを言ってたのでちょっとだけ触発されたのさ
自作のソフトでショートカットを実装したんだけどうまくいかなくてしばらく放置してたんだけど、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 件のコメント:
コメントを投稿