2017-12-02 4 views
0

마우스 움직임과 마우스 휠 회전을 사용하는 코드를 작성하려고했습니다. 마우스 끌기와 휠 회전이 똑같은 이벤트 (REPORT_MOUSE_POSITION (8000000))를 생성하고 다른 하나에서 말할 수는 없습니다. 내가 놓친 게있어?ncurses는 마우스 움직임에서 휠을 말할 수 없습니다.

MEVENT e; 
    mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, NULL); 
    while ((c = getch()) != 27){ // 27 = ESC 
     if (c == KEY_MOUSE){ 
      if (getmouse(&e) == OK){ 
       // e.bstate produces 8000000 for both wheel and mouse movement 

답변

0

일반적으로 휠 마우스 이벤트는 버튼 4 및 5로 표시됩니다. "all-events"플래그에는 해당 플래그가 포함됩니다. 관심있는 버튼의 플래그 조합을 대신 사용하면 원하는 결과를 얻을 수 있습니다.

manual page은 사용 가능한 플래그 (ncurses.h 헤더 파일에서도 볼 수 있음)를 나열하지만 단 하나의 버튼에 대한 모든 이벤트에 대해 동일한 사전 정의 된 기호는 없습니다.

그런데 ncurses5 (ncurses6 was released in August 2015)에서는 비트가 할당 된 방식으로 인해 버튼 5를 감지 할 수 없습니다. 버튼을 5 보고서 마우스 위치로 마스크의 같은 섹션 사용한 것이기 때문에 헤더 파일에서이 섹션에서 귀하의 질문에 관련된 : 당신은 ncurses5과 버튼 4을 얻을 것이다

/*                    
* In 32 bits the version-1 scheme does not provide enough space for a 5th  
* button, unless we choose to change the ABI by omitting the reserved-events. 
*/                    
#if NCURSES_MOUSE_VERSION > 1             

#define BUTTON5_RELEASED  NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_RELEASED) 
#define BUTTON5_PRESSED   NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_PRESSED) 
#define BUTTON5_CLICKED   NCURSES_MOUSE_MASK(5, NCURSES_BUTTON_CLICKED) 
#define BUTTON5_DOUBLE_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_DOUBLE_CLICKED) 
#define BUTTON5_TRIPLE_CLICKED NCURSES_MOUSE_MASK(5, NCURSES_TRIPLE_CLICKED) 

#define BUTTON_CTRL    NCURSES_MOUSE_MASK(6, 0001L)      
#define BUTTON_SHIFT   NCURSES_MOUSE_MASK(6, 0002L)      
#define BUTTON_ALT    NCURSES_MOUSE_MASK(6, 0004L)      
#define REPORT_MOUSE_POSITION NCURSES_MOUSE_MASK(6, 0010L)      

#else                   

#define BUTTON1_RESERVED_EVENT NCURSES_MOUSE_MASK(1, NCURSES_RESERVED_EVENT) 
#define BUTTON2_RESERVED_EVENT NCURSES_MOUSE_MASK(2, NCURSES_RESERVED_EVENT) 
#define BUTTON3_RESERVED_EVENT NCURSES_MOUSE_MASK(3, NCURSES_RESERVED_EVENT) 
#define BUTTON4_RESERVED_EVENT NCURSES_MOUSE_MASK(4, NCURSES_RESERVED_EVENT) 

#define BUTTON_CTRL    NCURSES_MOUSE_MASK(5, 0001L)      
#define BUTTON_SHIFT   NCURSES_MOUSE_MASK(5, 0002L)      
#define BUTTON_ALT    NCURSES_MOUSE_MASK(5, 0004L)      
#define REPORT_MOUSE_POSITION NCURSES_MOUSE_MASK(5, 0010L)      

#endif 

을하지만, 버튼 5가 균열을 빠져 나옵니다 (일부 이벤트가 나타날 수 있지만 버튼 5임을 알리는 방법은 없습니다). 마스크는 휠 마우스가 논의하기 전에 설정되었습니다 (1995 년 말).

+0

ncurses 5를 사용 중이므로 BUTTON4 이벤트를 수신하지 않아도됩니까? REPORT_MOUSE_POSITION 이벤트 만받습니다. – Nathan

관련 문제