Вход/Регистрация
Основы программирования в Linux
вернуться

Мэтью Нейл

Шрифт:

switch (choice) {

case 'q':

break;

case 'a':

add_record;

break;

case 'c':

count_cds;

break;

case 'f':

find_cd;

break;

case 'l':

list_tracks;

break;

case 'r':

remove_cd;

break;

case 'u':

update_cd;

break;

}

 } while (choice != 'q');

 endwin;

 exit(EXIT_SUCCESS);

}

Теперь давайте подробно рассмотрим функции, связанные с тремя секциями программы.

Формирование меню

В этой секции рассматриваются три функции, относящиеся к пользовательскому интерфейсу программы.

1. Функция

getchoice
, вызываемая из функции
main
, — это основная функция данной секции. В функцию
getchoice
передается приглашение
greet
и указатель
choices
на базовое или расширенное меню (в зависимости от того, выбран ли компакт-диск). Вы также увидите, как
main_menu
или
extended_menu
передаются как параметры в описанную ранее функцию
main
.

int get_choice(char *greet, char* choises[]) {

 static int selected_row = 0;

 int max_row = 0;

 int start_screenrow = MESSAGE_LINE, start_screencol = 10;

 char **option;

 int selected;

 int key = 0;

 option = choices;

 while (*option) {

max_row++;

option++;

 }

 if (selected_row >= max_row)

selected_row = 0;

 clear_all_screen;

 mvprintw(start_screenrow - 2, start_screencol, greet);

 keypad(stdscr, TRUE);

 cbreak;

 noecho;

 key = 0;

 while (key != 'q' && key != KEY_ENTER && key != '\n') {

if (key == KEY_UP) {

if (selected_row == 0) selected_row = max_row - 1;

else selected_row--;

}

if (key == KEY_DOWN) {

if (selected_row == (max_row - 1)) selected_row = 0;

else selected_row++;

}

selected = *choices[selected_row];

draw_menu(choices, selected_row, start_screen_row, start_screencol);

key = getch;

 }

 keypad(stdscr, FALSE);

 nocbreak;

 echo;

 if (key == 'q') selected = 'q';

 return(selected);

}

2. Обратите внимание на то, как две локальные функции

clear_all_screen
и
draw_menu
вызываются внутри функции
getchoice
. Первой рассмотрим функцию
draw_menu
:

void draw_menu(char* options[], int current_highlight, int start_row, int start_col) {

 int current_row = 0;

 char **option_ptr;

 char *txt_ptr;

 option_ptr = options;

 while (*option_ptr) {

if (current_row == current_highlight) attron(A_STANDOUT);

txt_ptr = options[current_row];

txt_ptr++;

  • Читать дальше
  • 1
  • ...
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: