2014-04-12 6 views
0

C/C++을 처음 사용하고 간단한 텍스트 사용자 인터페이스를 NCurses으로 만들고 있습니다.NCurses를 사용하여 C++에서 특정 키를 차단하는 방법

내가 콘솔 에코 문자와 같은 마우스 휠을 누르거나 화살표 키와 위/아래로 스크롤 할 때마다 :

"[[A^[[C^[[B^[[D" 

내가 키를 누르면 한 저를 표시합니다.

나는 이것들을 멈추고, 기본 키 (문장 부호와 문자)만을 반향하고 싶습니다.

여기 내 주요 루프입니다. 기본적으로 내가 만든 명령으로 내 자신의 콘솔이되기를 원합니다.

string input; 
char inputArr[80]; 
while (input != "q" && input != "quit" && input != "exit" && input != "leave") { 
    printw(" > "); 
    refresh(); 
    getstr(inputArr); 
    input = inputArr; 
    if (input.substr(0, 3) != "someCommand") { 
     printw("\n ~ %s\n\n", inputArr); 
     refresh(); 
    } else 
     execCmd(); 
} 
quit(); 

대부분 나는 C++이지만 C 함수 (libCurl을 사용함)가 있다고 생각합니다.

또한 NCurses를 사용하여 문자열을 더 깨끗하게 읽을 수있는 방법이 있습니까? 난 char 배열을 사용하는 것을 좋아하지 않는다 (Java에 익숙하다.).

+0

코드를 표시하십시오. 또한 사용중인 언어도 선택하십시오. C와 C++은 다른 언어입니다. – lpapp

답변

2

어도비 initscr()에 가까운 noecho()으로 전화하십시오.

이렇게하면 원치 않는 입력으로 화면이 찢어지는 것을 방지 할 수 있습니다. 나중에 입력 할 내용을 사용자가 볼 수있게하려면 echo()으로 전화해야합니다.

+0

루프에서 글자와 구두점을 반복하고 싶습니다. 화살표/마우스 휠과 같은 키를 반향시키고 싶지 않습니다. noecho()를 수행하면 모든 입력이 차단됩니다. 이 특정 입력을 차단하거나 특정 키를 흰색으로 나열하기 만하면됩니다. – Connor

+1

이것이 작동하는 방식입니다 :'noecho()'로 "자동"출력을 비활성화하고 나중에 명시 적으로 인쇄하고 싶은 모든 것을 인쇄하십시오 (예를 들어'printw()'와 같이). – mfro

+0

나는 가정한다. 하지만 사용자가 입력 할 때 getch()를 사용하여 각 문자를 읽고 인쇄해야하는지 여부를 확인해야합니다. – Connor