С для профессиональных программистов

         

графическом режиме. Функции передается двумерный


графическом режиме. Функции передается двумерный массив символов,

который   содержит   элементы   меню   (которые   может   выбрать

пользователь),  значение каждого элемента меню (его код),а  также

координаты  Х  и  У  отображения меню на экране.  Массив символов

определяет  максимальную  длину  каждого  элемента  меню   в   19

символов.   Функция   возвращает   в  качестве  результата  номер

выбранного пользователем элемента меню, начиная с 0, или -1, если

пользователь  не выбрал ни один из элементов меню.  Когда функция

начинает свою работу,  то она вначале вычисляет длину в  пикселах

(элементах растра) каждого элемента меню,  после чего резервирует

пространство по начальной и конечной  точке  растра  для  каждого

элемента  меню,  одновременно  запоминая эту информацию в массиве

len. (В четвертом графическом режиме каждый символ имеет высоту в

8 точек растра и ширину в 16 точек растра.) После этих вычислений, функция переходит в состояние ожидаения прерывания от клавиш "мыши". При этом осуществляется анализ нажата или нет клавиша "мыши" в момент нахождения ее курсора в области меню, и, если да, то в месте расположения какого элемента меню. Функция mouse_menu() приведена ниже.

/* Отображает однострочное меню для "мыши" и возвращает

код выбранного пользователем элемента меню                                                   */

mouse_menu(count, item, x, y)

int count;                                       /* количество элементов меню */

char item[][20];                                /* элементы меню */

int x, y;                                        /* позиции отображения */

int i, len[MENU_MAX][2], t;

int mousex, mousey;

goto_xy(x, y);

t = 0;

for(i=0; i<count; i++)

printf("%s   ", item[i]);

len[i][0] = t;

/* каждый символ имеет ширину в 16 точек растра */ len[i][1] = t + strlen(item[i])*16;

t = len[i][1] + 32; /* добавляется два пробела между элементами меню */

/* ожидание выбора пользователем элемента меню */

do

if(rightb_pressed() || leftb_pressed()) break;

 while(!kbhit());

/* ожидание нажатия клавиши */

while(rightb_pressed() || leftb_pressed());

/* получить текущую позицию курсора "мыши" */

mouse_position(&mousex, &mousey);

/* анализируется, находится ли курсор в пределах меню */

if(mousey>=0 && mousey<8)  /* символ имеет высоту

8 точек растра */ for(i=0; i<count; i++)

if(mousex>len[i][0] && mousex<len[i][1])

return i;

return i;

returtn -1; /* выбор из меню не осуществлялся */


Содержание  Назад  Вперед