ncurses に慣れようとしていますが、問題があります - KEY_LEFT などの定数が間違っているようです。
たとえば、キーボードの矢印をキャッチしようとしています。次のように単純にする必要があります
while (ch = getch()){
if (ch == KEY_LEFT)
foo();
}
しかし、それはうまくいきません。書いてもらったところ、ch
左矢印が 68、右矢印が 67、上が 65、下が 66 と書かれています。
それはそれほど問題にはなりませんが、マウス イベントをキャッチしようとするとうまくいきません。ターミナルを左クリックすると、33 から 742 の値が得られます。左上隅をクリックすると最小になり、右下隅をクリックすると最も大きくなります。なんてこったい?
念のため、これが私のメイン全体です
int main(void){
initscr();
start_color();
init_pair(1, COLOR_YELLOW, COLOR_WHITE);
init_pair(2, COLOR_RED, COLOR_RED);
cbreak();
//printw("Hai!\n");
noecho();
int width;
int height;
getmaxyx(stdscr, height, width);
int posx = 30;
int posy = 30;
const char* str = " ";
const char* hint = "ch = %d";
curs_set(0);
mousemask(BUTTON1_CLICKED, NULL);
unsigned int ch = 0;
while (ch = getch()) {
attron(COLOR_PAIR(1));
mvprintw(0, 0, hint, ch);
mvdelch(posy,posx);
mvdelch(posy, posx);
mvdelch(posy, posx);
switch (ch) {
case 68:
if (posx > 0) posx--;
//mvprintw(1,0,"LEFT");
break;
case 67:
if (posx < width) posx++;
break;
case 65:
if (posy > 0) posy--;
break;
case 66:
if (posy < height) posy++;
break;
case KEY_MOUSE:
MEVENT event;
if (getmouse(&event)==OK){
posx = event.x;
posy = event.y;
}
}
attron(COLOR_PAIR(2));
mvprintw(posy, posx, str);
refresh();
}
endwin();
return 0;
}