URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 2338
[ Назад ]

Исходное сообщение
"ncurses.h -- не работают окна"

Отправлено vincent , 01-Дек-03 18:44 
Помогите разобраться с окнами.
Суть проблемы:
не получается что либо сделать с созданными окнами, даже вывести простой текст
Подскажите что я делаю не так.
Заранее благодарен.
Вот пример моего Makefile и моей программы
===Makefile===
#Makefile for the program window
OBJECTS= window.o
PROGRAMS= window
window: $(OBJECTS)
g++ $(CFLAGS) -o $(PROGRAMS) $(OBJECTS)  -lncurses -lm
# Clean up build products.
clean:
rm -f *.o $(PROGRAMS)
===window.cpp===
#include <ncurses.h>
int main() {
    
    if(!initscr()){
printf("ERROR");
return 1;
    }
    else{
addstr("SCREEN is work\n");//выводится это сообщение
getch();
    }
    refresh();
    noecho();
    cbreak();
    WINDOW* mywin;
    mywin=newwin(0,0,0,0);
    
    for(int i=0; i<COLS; i++){
waddch(mywin,'#');//хочу вывести в окно mywin знаки #
    }//но они не выводятся
    getch();
    endwin();
    return 0;
}

Содержание

Сообщения в этом обсуждении
"ncurses.h -- не работают окна"
Отправлено divan , 02-Дек-03 15:08 
>Помогите разобраться с окнами.
>Суть проблемы:
>не получается что либо сделать с созданными окнами, даже вывести простой текст
>
>Подскажите что я делаю не так.
>Заранее благодарен.
>Вот пример моего Makefile и моей программы
>===Makefile===
>#Makefile for the program window
>OBJECTS= window.o
>PROGRAMS= window
>window: $(OBJECTS)
>g++ $(CFLAGS) -o $(PROGRAMS) $(OBJECTS)  -lncurses -lm
># Clean up build products.
>clean:
>rm -f *.o $(PROGRAMS)
>===window.cpp===
>#include <ncurses.h>
>int main() {
>
>    if(!initscr()){
>printf("ERROR");
>return 1;
>    }
>    else{
>addstr("SCREEN is work\n");//выводится это сообщение
>getch();
>    }
>    refresh();
>    noecho();
>    cbreak();
>    WINDOW* mywin;
>    mywin=newwin(0,0,0,0);
>
>    for(int i=0; i<COLS; i++){
>waddch(mywin,'#');//хочу вывести в окно mywin знаки #
>    }//но они не выводятся
>    getch();
>    endwin();
>    return 0;
>}

if(!initscr()){ - означает true если initscr возвращает ноль. А при ошибке initscr возвращает NULL, иначе - указатель. В мане ведь написано.
Поэтому эта строчка должна выглядеть так - if (initscr() == NULL) {

Удачи!


"ncurses.h -- не работают окна"
Отправлено divan , 02-Дек-03 15:14 
А символы не выводяться потому что, после вывода сивмовлов нужно обновлять окно - wrefresh(mywin);

Плюс размер окошка нужно сделать больше чем 0х0 :) ХОтя бы newwin(LINES, COLS, 0, 0);


"ncurses.h -- не работают окна"
Отправлено vincent , 02-Дек-03 16:25 
wrefresh(mywin);  -- помогло, большое спасибо
newwin(0,0, 0, 0); -- это создается окно размером в весь экран



"ncurses.h -- не работают окна"
Отправлено divan , 02-Дек-03 17:09 
>newwin(0,0, 0, 0); -- это создается окно размером в весь экран
Да, точно, уже увидел. My bad :)