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



         

Ввод информации с помощью "мыши" в программе рисования. - часть 2


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

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

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

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

определяет  максимальную  длину  каждого  элемента  меню   в   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; /* выбор из меню не осуществлялся */




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