AppWizardにてSDIを製作して基本クラスをCFormViewとしてキーボードからの入力テストを
しているのですが、単にCxxView::OnChar(.....)として現在押されたキーを画面に表示しているのですが
Commandボタンを置いたらキー入力を受け付けなくなりました。
過去のログからPreTranslateMessage()で取得できると書かれていたのですが、その中にどのようにして
コードを書けば、キーを受け付けられるのでしょうか?取得したいのは仮想キーです。フォーカスがコマンドボタンにあるからなのでしょうか?
よろしくお願いいたします。
自己レスです。
ごめんなさい。上記の件はPreTranslateMessage()でwParamを取得出来たので
問題無くなりました。
で次なる問題が。。。SHIFTを押しながらAとやると別のプログラムみたいに
複数のキーを認識させる方法が分かりません現在は
switch(pMsg->wParam){
case 'a':
処理
case 'b':
処理
}
みたいにして処理しています。最初に出した質問では'a'ではなくVK_Aとしていたため出来なくて
悩んでいました。で複数の時はVK_SHIFT +'a'トやってもだめなんですよね???
どのように対処すればいいのでしょうか?
> 複数の時はVK_SHIFT +'a'トやってもだめなんですよね???
「VK_SHIFT & VK_A」では無いでしょうか?←試してないです
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);
}