- ベストアンサー
自作ダイアログボックス中のエディットボックスでCtrl+Aを使えるようにしたい。
リソースエディタで作成したダイアログボックスの中のエディットボックスで、 Ctrl+Aで全範囲選択をしたいのですが実現方法が分かりません。 同様に、リストビューの選択行を「Delキー」で削除させる方法も教えていただきたいです。 (削除ボタンを作成し、その押下によって削除できるようにはなっています。) 環境は、VC++ 6.0、Win32 APIです。 よろしくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
★WM_COMMAND ではないです。 ・『CTRL+A』の検出は WM_KEYDOWN で『CTRL』の押し下げと『A』キーの押し下げを チェックすれば良いです。なのでサブクラス化したときの WM_COMMAND ではなくて WM_KEYDOWN という事ですから ID というよりは仮想キーコードをチェックします。 ・次のリンクを参考にして下さい。 http://wisdom.sakura.ne.jp/system/winapi/win32/win30.html→『キーボードイベント』 http://wisdom.sakura.ne.jp/system/winapi/win32/win32.html→『仮想キーの状態』 >同様に、リストビューの選択行を「Delキー」で削除させる方法も教えていただきたいです。 ↑ こちらもサブクラス化したときに『DEL』キーを WM_KEYDOWN メッセージで処理します。 『DEL』キーの仮想キーコードは VK_DELETE です。 『INS』キーの仮想キーコードは VK_INSERT となります。 あと『A』から『Z』はそのまま文字コードで 'A'から'Z'とします。 決して VK_A ~ VK_Z があるわけではありません。注意! ・以上。
その他の回答 (1)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★両方ともサブクラス化などで出来そうですね。 ・サブクラス化したプロシージャの中で『CTRL+A』を検出してその動作に 『すべて選択』の機能を追加します。 EM_SETSEL ですべて選択させることが出来ます。 SendMessage()、PostMessage() などでエディットボックスに送りましょう。 ・短いですが以上です。
お礼
早速のご回答ありがとうございます。 大筋は分かりました。 基本的なことで申し訳ないのですが『CTRL+A』の検出というのはどのように行えばよいのでしょうか。 WM_COMMAND:などで捕まえればいいのでしょうか。 その際のIDは何になるのでしょうか。
お礼
とても分かりやすい回答ありがとうございます。 これでなんとか出来そうです。 ありがとうございました。
補足
お世話になっております。 お陰さまで、目的の機能を実現することができました。 本当にありがとうございました。 ところで話は変わってしまうのですが、この質問以外で現在私が投稿しているものがありまして まだ解決していない状況です。 大変図々しいお願いかとは思いますが、もしお時間が許されるようでしたら、 お暇なときで結構ですのでアドバイスを頂けたら幸いです。 プログラミングに非常に精通していらっしゃるOh-Orangeのご意見・アドバイスを伺いたい次第です。 URLはhttp://oshiete.nikkeibp.co.jp/qa3184828.htmlです。 何卒、よろしくお願い致します。 不適切な発言でしたら、大変申し訳ありませんでした。