2009-09-15 15 views
0

基本的に、1つのタイプがキーダウンイベントが発生すると発生します。キーが一定時間(〜1秒)以上保持されている場合、キーアップが発生するまでキーが繰り返し押されます。私はキーが自動的にC++アプリケーションで抑制されるのにかかる時間を変更したいと思います。これはどうすればできますか?キーストロークの速度を変更するC++

おかげ

+0

テトリスゲームを作成する – jmasterx

答えて

3

キー操作がWindowsによって自動的に制御され、経常なっ速度。

キープレスの自動再発行を操作する場合は、キーダウンイベントを待つのではなく、キーの状態をポーリングする方が効果的です。アプリケーションの必要性に応じてどれだけ反応するかによって異なります。

この記事では、キーの状態を照会する方法を考え出すに役立つことがあります。link

0

これを処理する簡単な方法は、OnKeyDownイベントを中心に時間のバッファを確立することです。コントロールがセカンダリイベントハンドラに渡されるかどうかを決定するタイマーを設定します。タイマーが時間切れになっている場合は、制御を渡すことができます。タイマーが期限切れになっていない場合は、戻ってイベントを未処理のままにしてください。セカンダリイベントハンドラに制御を渡す前に、タイマーを直ちに開始します。

void KeyDownHandler(...) 
{ 
    // ... 
    if (TimeLeft() <= 0) 
    { 
     StartTimer(); 
     handleKeyDown(); 
    } 
} 

タイマーは重複イベントの数をカウントするよりも優れています。これは、指定されたシステムの再生回数が同じであると想定できないためです。

私は、キーの状態をポーリングするとうまくいくかもしれないとスチュアートに同意します。あなたが達成しようとしているものに依存します。

このタイプの動作は、ユーザーにとって非常に迷惑になることがあります。なぜ重複を無視する必要があるのでしょうか?

+0

キーボードの自動リピート(システムによって異なる)に頼るのではなく、キーが停止しているかどうかを追跡し、アプリで手動で自動リピートを実行するだけです。 KeyDownHandlerは定期的なリピートタイマーを開始し、KeyUpHandlerはクリアする必要があります。 –

-1

使用SetKeySpeedのAPI(カーネル)

+0

あなたのアプリだけにグローバル設定を変更しないでください。 –

0

あなたは、WindowsのAPIを活用することができるかもしれませんが、これはOSによって制御される可能性があります。わからない... キーが押されてから設定された秒数が経過した後に複数回キーをシミュレートするなどのコマンドを手動で描画する必要がある場合があります。

1

this newsgroup threadに記載されているように、SystemParametersInfo関数を使用してキーボードの遅延とリフレッシュレートを変更することができます。

+0

+1ですが、1つのアプリケーションの利益のためにグローバル設定を変更することはお勧めできません。この場合はスチュアートの答えが良いです。 –

関連する問題