Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ncurses проблема c box и выводом в окно 
:(
    Опции темы
En_t_end
Дата 13.7.2007, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Создал новое окно newwin'ом. Далее вызвал box для отрисовки границ окна. Начинаю вводить в окно данные, а они затирают границы.
PM MAIL ICQ Skype GTalk Jabber   Вверх
bsa
Дата 13.7.2007, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



попробуй newwin'ом сделать окно внутри бокса.
PM   Вверх
En_t_end
Дата 13.7.2007, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



bsa, как-то мутно ИМХО, ведь будет два окна по-сути для одной цели.
Ну да ладно, сделал subwin'ом внутри окно, как положено, передал ему аргументы: родительское окно,строчки(уменьшил на 2),столбцы(уменьшил на 2), позиции(соотвественно сдвинул их по осям на +2) и получил странную вещь, как-то ввод туда(в subwin'овское окно) вообще совершить нельзя :( А если делать newwin'ом, то придется ведь при наложении нескольких окон в определенном порядке их перерисовывать, да к тому же при перемещении нужно будет перемещать оба окна, а так subwin'ом - одно.
Код

#include <ncurses.h>
#include <form.h>
#include <sqlite/sqlite3.h>

void draw_background(void)
{
    noecho();
    WINDOW *mywin = newwin(13,13,8,8);
    box(mywin,ACS_VLINE,ACS_HLINE);
    WINDOW *submy = subwin(mywin,10,10,10,10);
    scrollok(submy,TRUE);
    touchwin(mywin);
    refresh();
    int key;
    do
    {
    key = wgetch(submy);
    switch(key)
    {
    case 'w':
        wscrl(submy,1);
        break;
        case 's':
        wscrl(submy,-1);
        break;
    default:
        wechochar(submy,'H');
        break;
    }
    }while(key != 'e');
    wgetch(submy);
    delwin(submy);
    delwin(mywin);
}

int main(int argc,char **argv)
{
    if(argc < 1)
    {
    printf("%s\n","Arguments failed");
    return -1;
    }
    initscr();
    move(10,10);
    draw_background();
    refresh();
    getch();
    endwin();
    return 0;
}


PM MAIL ICQ Skype GTalk Jabber   Вверх
En_t_end
Дата 25.7.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Сделал так
Код

#include <ncurses.h>

void draw_background(void)
{
    noecho();
    WINDOW *mywin = newwin(14,14,8,8);
    box(mywin,ACS_VLINE,ACS_HLINE);
//    WINDOW *submy = newwin(12,12,9,9);
    WINDOW *submy = derwin(mywin,12,12,1,1);
    scrollok(submy,TRUE);
    touchwin(mywin);
    wrefresh(mywin);
    wrefresh(submy);
    int ypos = 8;
    int xpos = 8;
    int key;
    do
    {
    key = wgetch(submy);
    switch(key)
    {
    case 'w':
        wscrl(submy,1);
        break;
        case 's':
        wscrl(submy,-1);
        break;
    case 't':
        mvwin(mywin,--ypos,xpos);
        break;
    case 'g':
        mvwin(mywin,++ypos,xpos);
        break;
    case 'f':
        mvwin(mywin,ypos,--xpos);
        break;
    case 'h':
        mvwin(mywin,ypos,++xpos);
        break;
    default:
        wechochar(submy,'H');
        break;
    }
    touchwin(mywin);
    wrefresh(mywin);
    wrefresh(submy);
//    refresh();
    }while(key != 'e');
//    wgetch(submy);
    delwin(submy);
    delwin(mywin);
}

int main(int argc,char **argv)
{
    if(argc < 1)
    {
    printf("%s\n","Arguments failed");
    return -1;
    }
    initscr();
    cbreak();
    draw_background();
    refresh();
    getch();
    endwin();
    return 0;
}

Работает так как ожидал, т.е есть окно оформленное соответственно, в него можно осуществлять вывод причем оно прокручиваемо. Теперь проблема немного изменилась, я думал, если создать внтутреннюю рабочую область subwin'ом или derwin'ом то при перемещении родительского окна должно перемещаться и дочернее, но происходит всё как-то жутко, старая дочерняя область остается на месте, появляется новая откуда-то, все сопровождается мусором от старого box'а :( Пожалуйста, гляньте на приложение, кнопки движения:
w - скролирование вверх
s - вниз
t - перемещение родительского окна вверх
g - вниз
f - влево
h - вправо
любая другая кнопка - вывод 'H' в дочернее окно.

Это сообщение отредактировал(а) En_t_end - 25.7.2007, 20:03
PM MAIL ICQ Skype GTalk Jabber   Вверх
En_t_end
Дата 26.7.2007, 16:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: нет
Всего: 20



Скорее всего проблема в том, что все же ncurses немногим выше обычного программирования терминала. Поэтому все вещи которые меня здесь интересовали придется решать самостоятельно над ncurses :(
PM MAIL ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0688 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.