【发布时间】:2020-09-19 03:16:24
【问题描述】:
我正在尝试使用 ncurses 用鼠标在屏幕上绘制一行字符。我能够区分屏幕上的 BUTTON1_CLICKED 事件和 BUTTON1_RELEASED 事件,但还没有弄清楚如何在它们之间进行绘制。
以下代码在其事件位置打印 BUTTON1_CLICKED 和 BUTTON1_RELEASED:
void obstacle_draw(WINDOW * boardWin, int array[LINES][COLS]) {
int ch;
MEVENT event;
keypad(boardWin, TRUE);
mousemask(BUTTON1_CLICKED | BUTTON1_RELEASED | REPORT_MOUSE_POSITION, NULL);
mouseinterval(0);
while(1) {
ch = wgetch(boardWin);
if (ch == KEY_MOUSE) {
getmouse(&event);
if (event.bstate & BUTTON1_CLICKED) {
wattron(boardWin, COLOR_PAIR(BLACK_ON_WHITE) | A_REVERSE);
mvwprintw(boardWin, event.y, event.x, "CLICKED at %d,%d", event.y, event.x);
wrefresh(boardWin);
} else if (event.bstate & BUTTON1_RELEASED) {
wattron(boardWin, COLOR_PAIR(BLACK_ON_WHITE) | A_REVERSE);
mvwprintw(boardWin, event.y, event.x, "RELEASED at %d,%d", event.y, event.x);
wrefresh(boardWin);
}
}
if (ch == '\n') {
break;
}
}
return;
}
在我的 while 循环之前添加以下行允许我在第一次单击鼠标后绘制这些坐标,而无需按住按钮。但我似乎无法关闭它(我也不明白它是如何工作的):
printf("\033[?1003h\n");
我觉得我已经阅读了所有关于堆栈溢出的 ncurses 鼠标帖子。我错过了什么?
【问题讨论】:
标签: c mouseevent mouse drag ncurses