2016-10-19 10 views
2

マウスイベントに応答するためにコンソールプログラムをVSに書きます。私は、私がクリックしたときに何かを印刷したいので、私はこのコードを書く:VSでコンソールを左クリックするとコンソールプログラムが中断されるのはなぜですか?

int keyPressed(int key){ 
return (GetAsyncKeyState(key) & 0x8000 != 0); 
} 

void Mouse::click(){ 
while (1) 
{ 
    if (keyPressed(VK_LBUTTON) || keyPressed(VK_RBUTTON)){ 
     cout << "click\n"; 
    } 
} 
} 

int main(){ 
Mouse mouse; 
while (1){ 
    mouse.click(); 
} 
} 

私は、左クリックしたときに、「クリック」が印刷されたが、私はキーボードや右クリックを押した場合、それはされていません印刷されます。

何が起こっていますか?どうすればそれを処理できますか?ありがとう〜

+0

右クリックすると、問題はありません。 – Rachel

+0

左のマウスはハイライトテキストに使用されているので、次に選択されたテキストをコピーするために 'Enter'キーをクリックしているからです。何が行われているかにかかわらず、マウスの左ボタンをクリックすると、コンソール出力は常に停止します。無関係な問題: 'while(1)'ループは非常に効率が悪いので、CPUコア全体をハイジャックして円を描こうとします。少なくとも「スリープ(10)」をそこに入れてください。しかし、適切なGUIプログラムを作成するためには、実際にウィンドウプログラム(* "Win32コンソールプロジェクト" *の代わりに* "Win32プロジェクト" *を作成する)が必要です。(例:https://msdn.microsoft.com/en-us/ライブラリー/ bb384843.aspx) –

+1

これは、ウィンドウキャプションの左上にあるアイコン> [編集]> [マーク]をクリックすると、より明示的に行われます。ユーザーがコンソールウィンドウからテキストをコピー/ペーストできるようにするのに役立ちます。単純なマウスクリックが自動的に編集モードに入るかどうかは設定です。アイコン> [プロパティ]> [オプション]タブをクリックし、[クイック編集モード]チェックボックスをオフにします。 –

答えて

0

!= has a higher precedence than &したがって、&が有効になる前に0x8000 != 0が計算されています。

括弧を使用 - これにその行を変更:

return (GetAsyncKeyState(key) & 0x8000) != 0; 
+0

結果は変更されません。しかし、コンソール以外の場所を左クリックすると、「クリック」が印刷されることがわかりました。 – Rachel

関連する問題