2017-12-02 41 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として表示されます。「すべてイベント」フラグには、それが含まれます。代わりに興味のあるボタンのフラグの組み合わせを使用すると、必要な結果が得られます。

manual pageには利用可能なフラグ(ncurses.hヘッダーファイルにも記載されています)が一覧表示されていますが、1つのボタンのすべてのイベントに対応する定義済みシンボルはありません。

ところで、ncurses5(ncurses6 was released in August 2015)では、ビットが割り当てられているためにボタン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はクラックを通り抜けます(いくつかのイベントが表示されますが、ボタン5であることはわかりません)。議論するホイールマウスを誰かが持っている前に、マスクを設置しました(1995年後半)。

+0

私はncurses 5を使用していますので、BUTTON4イベントを取得するはずはありませんか? 私はREPORT_MOUSE_POSITIONイベントのみを取得します。 – Nathan

関連する問題