わからなくて悩んでいます。よろしくご教授ください。
Sub MainWnd_KeyDown(KeyCode As Long, flags As Long)
これのKeyCodeで矢印キーボタンを読んでいます。
shfitキー+矢印キーの場合はどう読めば良いでしょうか。
KeyDown
Re: KeyDown
入力フォーカスがウィンドウのボタンなどのコントロールに無ければ、これで判断できると思います。
If GetAsyncKeyState(VK_SHIFT) < 0 Then
If GetAsyncKeyState(37) < 0 Then
'●●●●●● Shift + ←押された
OutputDebugString("Shift + ←押された")
ElseIf GetAsyncKeyState(38) Then '↑
'●●●●●● Shift + ↑押された
OutputDebugString("Shift + ↑押された")
EndIf
EndIf
-----------------------------------------------------------------
フォーカスがボタンなどに行ってしまう場合は
Createなどでタイマーをセットして、
SetTimer(hMainWnd,0,100,0) '100の所がタイマー処理呼び出し間隔
Sub MainWnd_Timer(TimerID As DWord)
If GetAsyncKeyState(VK_SHIFT) < 0 Then
If GetAsyncKeyState(37) < 0 Then
'●●●●●● Shift + ←押された
OutputDebugString("Shift + ←押された")
ElseIf GetAsyncKeyState(38) Then '↑
'●●●●●● Shift + ↑押された
OutputDebugString("Shift + ↑押された")
EndIf
EndIf
End Sub
こうすればOKです。
If GetAsyncKeyState(VK_SHIFT) < 0 Then
If GetAsyncKeyState(37) < 0 Then
'●●●●●● Shift + ←押された
OutputDebugString("Shift + ←押された")
ElseIf GetAsyncKeyState(38) Then '↑
'●●●●●● Shift + ↑押された
OutputDebugString("Shift + ↑押された")
EndIf
EndIf
-----------------------------------------------------------------
フォーカスがボタンなどに行ってしまう場合は
Createなどでタイマーをセットして、
SetTimer(hMainWnd,0,100,0) '100の所がタイマー処理呼び出し間隔
Sub MainWnd_Timer(TimerID As DWord)
If GetAsyncKeyState(VK_SHIFT) < 0 Then
If GetAsyncKeyState(37) < 0 Then
'●●●●●● Shift + ←押された
OutputDebugString("Shift + ←押された")
ElseIf GetAsyncKeyState(38) Then '↑
'●●●●●● Shift + ↑押された
OutputDebugString("Shift + ↑押された")
EndIf
EndIf
End Sub
こうすればOKです。