キーイベントを認識するには – プログラミング – Home

キーイベントを認識するには
 
通知
すべてクリア

キーイベントを認識するには


まさたか
 まさたか
(@まさたか)
ゲスト
結合: 24年前
投稿: 2
Topic starter  

AppWizardにてSDIを製作して基本クラスをCFormViewとしてキーボードからの入力テストを
しているのですが、単にCxxView::OnChar(.....)として現在押されたキーを画面に表示しているのですが
Commandボタンを置いたらキー入力を受け付けなくなりました。

 過去のログからPreTranslateMessage()で取得できると書かれていたのですが、その中にどのようにして
コードを書けば、キーを受け付けられるのでしょうか?取得したいのは仮想キーです。フォーカスがコマンドボタンにあるからなのでしょうか?
よろしくお願いいたします。


引用解決済
トピックタグ
まさたか
 まさたか
(@まさたか)
ゲスト
結合: 24年前
投稿: 2
Topic starter  

自己レスです。

ごめんなさい。上記の件はPreTranslateMessage()でwParamを取得出来たので
問題無くなりました。

で次なる問題が。。。SHIFTを押しながらAとやると別のプログラムみたいに
複数のキーを認識させる方法が分かりません現在は

switch(pMsg->wParam){
case 'a':
処理
case 'b':
処理
}
みたいにして処理しています。最初に出した質問では'a'ではなくVK_Aとしていたため出来なくて
悩んでいました。で複数の時はVK_SHIFT +'a'トやってもだめなんですよね???
どのように対処すればいいのでしょうか?


返信引用
重
 重
(@重)
ゲスト
結合: 24年前
投稿: 84
 

> 複数の時はVK_SHIFT +'a'トやってもだめなんですよね???
「VK_SHIFT & VK_A」では無いでしょうか?←試してないです


返信引用
Bun
 Bun
(@Bun)
ゲスト
結合: 24年前
投稿: 761
 

Bunです。こんにちは。
GetKeyState(VK_SHIFT)が使えそうです。
詳細はHELPで検索してみてください。
下記の例はAキーが押された時の”SHIFTキーの状態”
を調べる方法です。
いかがでしょうか?

BOOL CxxxDlg::PreTranslateMessage(MSG* pMsg)
{

// TODO: この位置に固有の処理を追加するか、または基本クラスを呼び出してください
if (pMsg->message == WM_KEYDOWN) {

switch (pMsg->wParam) {
case 'a':
case 'A':
short sKeyState;

sKeyState = GetKeyState(VK_SHIFT);
if (sKeyState & 0x80)
{
// ここにシフトキーが押されていたら行う処理を記述
}
return TRUE;
break;
default:
break;
}
}

return CDialog::PreTranslateMessage(pMsg);
}


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました