【发布时间】:2018-05-14 00:39:56
【问题描述】:
我正在尝试使用鼠标单击来增加和减少 ncurses 窗口上的值,一切正常,但如果我减少到数字为负的点,然后尝试再次增加(如 -1),第二个字符(1)将继续显示在窗口中,而我更改数字(-)位置的主要字符将发生变化,我意识到问题是我只在event.xevent.y的位置进行更改mvwprintw
所以问题是,允许我删除它的最简单方法(可能是一个 ncurses 函数)是什么。
while((ch = getch()) != KEY_F(2)) {
switch(ch) {
case KEY_MOUSE :
if (getmouse(&event) == OK) {
if (event.y == 39 && event.x >= 1 && event.x <= 10) {
item_actif = PLUS;
mvwprintw(fen_outils, 0, 1, "X");
mvwprintw(fen_outils, 1, 1, " ");
wrefresh(fen_outils);
}
else if (event.y == 40 && event.x >=1 && event.x <= 10) {
item_actif = MINUS;
mvwprintw(fen_outils, 0, 1, " ");
mvwprintw(fen_outils, 1, 1, "X");
wrefresh(fen_outils);
}
else if (event.y > 0 && event.y < NB_LIGNES_SIM + 1 && event.x > 0 && event.x < NB_COL_SIM + 1) {
switch (item_actif) {
case PLUS :
k=0;
l=0;
for(i = 0;i<36;i+=4){
k++;
l=0;
for(j=19;j<129;j+=11){
if((event.y==i+1 && event.x==j+1)){
++tab[k][l];
sprintf(tabChar[k][l],"%d",tab[k][l]);
mvwprintw(fen_sim, event.y - 1, event.x - 1, tabChar[k][l]);
wrefresh(fen_sim);
refresh();
break;
}
l++;
}
}
break;
case MINUS :
k=0;
l=0;
for(i = 0;i<36;i+=4){
k++;
l=0;
for(j=19;j<129;j+=11){
if((event.y==i+1 && event.x==j+1)){
--tab[k][l];
sprintf(tabChar[k][l],"%d",tab[k][l]);
mvwprintw(fen_sim, event.y - 1, event.x - 1, tabChar[k][l]);
wrefresh(fen_sim);
refresh();
break;
}
l++;
}
}
}
}
}
}
}
【问题讨论】: