2014-03-04 4 views
0

C++에서 'c'키를 누르면 현재 GetAsyncKeyState 이벤트 처리기가 실행 중입니다. 나는 'C'가 너무 누르지 누른 경우 내가 키가 아래로 밀려 경우 내 부울 변수가 말해 isKeyPressed 사용 알고 싶어 그래서 bassically더 나은 키 누름

 bool isKeyPressed = false; 
void someFuntionOne() 
{ 

    if(GetAsyncKeyState('C') & 0x8000) 
    { 

     if(isKeyPressed) 
     { 
      isKeyPressed = false; 
     } 
     else 
     { 
      isKeyPressed = true; 
     }  
    } 
} 

void someFunctionTwo() 
{ 
    if(isKeyPressed) 
    { 
    // Do something  
    } 
} 

: 여기

내 코드입니다 어떤 지점. 눌렀 으면 isKeyPressed를 true로 설정하고 다시 누르면 isKeyPressed를 false로 설정합니다.

내가 가진 문제는 거대한 OpenGL/C++ 프로그램을 실행하여 한 번의 반복으로 전체 프로그램을 실행하고 'C'키를 누른다면 , 프로그램은 다른 코드의 나머지 부분을 여전히 실행 중이므로 GetAsyncKeyState ('C')가 & 0x8000인지 확인하는 코드 섹션에 현재 있지 않으므로 해당 이벤트를 잡을 수 없습니다.

프로그램이 항상 실행 시간의 어떤 시점에서 발생하는 이벤트를 수신하는이 이벤트를 확인할 수있는 더 나은 방법이 있습니까? 어떻게 구현할 수 있습니까?

+1

:! isKeyPressed = – CoryKramer

+0

위대한 팁 덕분에 isKeyPressed (못생긴) 대안은 같은입니다! – Morelka

답변

0

일반적으로 응용 프로그램에 이벤트를 전달하는 사람은 응용 프로그램에서 이벤트를 처리 할 수있을 때까지 (즉 각 주 루프 반복이 끝날 때까지) 이벤트를 대기열에 넣습니다. 그래서 이상적으로 당신은 그 단계의 사건들에 반응 할 것입니다. 당신은 그 모든 경우/다른 블록을 제거하고 그것을 대체 할 수

bool keyWasPressed = false; 
void processKeyEvent() { 
    if(<C is pressed>) { 
     keyWasPressed = true; 
    } 
} 
void someFunction() { 
    if(keyWasPressed) { 
     keyWayPressed = false; 
     // Do something  
    } 
}