【问题标题】:Ncurses WINDOW not refreshing properlyNcurses WINDOW 没有正确刷新
【发布时间】: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++;
              }
            }



            }
                    }
                }



            }
    }

Control PANEL ncurses

【问题讨论】:

    标签: c refresh ncurses


    【解决方案1】:

    我找到了最简单(但不是最好)的答案,即在这两种情况下都添加:

       if(tab[k][l] < 0){
                mvwprintw(fen_sim, event.y -1, event.x -1, "  ");
                    wrefresh(fen_sim);
    
        }
    

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多