ncurses不能告诉轮子鼠标移动

问题描述 投票:0回答:1

我试着编写代码来使用鼠标移动和鼠标滚轮旋转。事实证明鼠标拖动和车轮旋转产生完全相同的事件 - REPORT_MOUSE_POSITION(8000000) - 我不能告诉另一个。我缺少什么?

    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
position report mouse ncurses mousewheel
1个回答
0
投票

按照惯例,滚轮鼠标事件被视为按钮4和5.“所有事件”标志包括该标记。如果您使用您感兴趣的按钮组合标记,您将获得所需的结果。

manual page列出了可用的标志(你也可以在ncurses.h头文件中看到),但是对于一个按钮,所有事件都没有等效的预定义符号。

顺便说一句,在ncurses5(ncurses6 was released in August 2015)中,由于分配位的方式,您无法检测按钮5。在头文件中,此部分与您的问题相关,因为按钮5将使用与报告鼠标位置相同的掩码部分:

/*                                                                              
 * 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  

您将获得带有ncurses5的按钮4,但是按钮5会从裂缝中掉落(您可能会看到一些事件,但是没有办法告诉它是按钮5)。这些面具是在任何人有轮鼠讨论之前建立的(1995年末)。

© www.soinside.com 2019 - 2024. All rights reserved.