2016-10-19 2 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

관련 문제