Форум: Форум C++Разное
Новые темы: 00
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: очень нужна помощь проблемы с функциональными клавишами
 
 автор: lis'ka   (15.01.2009 в 20:18)   письмо автору
 
 

Помогите, пожалуйста, в программе нужно задать вызов меню по функциональным клавишам, вроде сделала, но при запуске он их не распознаёт помогите в чём ошибка
вот кусок проги:
//Главное меню
void menu()
{
int n;
while(1)

    {    
      printf("\n faily      -F1");
      printf("\n dobavlenie -F2");
      printf("\n udalenie   -F3");
      printf("\n v_po_atr   -F4");
      printf("\n sort       -F5");
      printf("\n udal_vse   -F6");
      printf("\n prosm      -F7");
      printf("\n redaktir   -F8");
      printf("\n vyhod      -F10 \n");
      scanf("%d",&n);
    clear_screen();
    n=getch();
      switch (n)
      {
        case 68: return;
        case 59: filework();break;
        case 60: dobavlenie();prosmotr_zapisey();break;
        case 61: udalenie();prosmotr_zapisey();break;
        case 62: vyvod_po_atributu();prosmotr_zapisey(); break;
        case 63: sortirovka();prosmotr_zapisey(); break;
        case 64:fatal_delete();break;
        case 65:prosmotr_zapisey();break;
        case 66:update();break;
        defaultprintf("\n Nazhata ne ta klavisha!!!");
      }
    }
}

  Ответить  
 
 автор: GeorgeIV   (16.01.2009 в 09:48)   письмо автору
 
   для: lis'ka   (15.01.2009 в 20:18)
 

И не распознаете при таком коде. Пытаетесь использовать специальные клавиши, а считываете символьные.
Вот что говорит MSDN по этому поводу:
When reading a function key or an arrow key, each function must be called twice; the first call
 returns 0 or 0xE0, and the second call returns the actual key code.

These functions lock the calling thread and are therefore thread-safe. For non-locking versions

Т.е. отсюда следует, что надо сначала проверить на 0 или 0xE0, и если так, то вызвать функцию еще раз, тогда и получите код нажатой спецклавиши.

Вот так у меня сработало:


.....
//      scanf("%d",&n);
//    clear_screen();
    n=getch();
if ((n==0) || (n==0xE0))
n = getch();
else
continue;
      switch (n)
      {
.......

  Ответить  
 
 автор: Lis'ka   (16.01.2009 в 18:23)   письмо автору
75.5 Кб
 
   для: GeorgeIV   (16.01.2009 в 09:48)
 

ААА, не помогает ничего. вот полная прога , помогите пожалуйста, я уже с этими функциональными клавишами замучалась

  Ответить  
 
 автор: GeorgeIV   (19.01.2009 в 18:15)   письмо автору
 
   для: Lis'ka   (16.01.2009 в 18:23)
 

так попробуй заменить кусок в меню в своей проге на мой кусок!

PS причем в каждом меню

PPS. Не поленился, заменил, скомпилировал, запустил - работает. Так что меняйте код и вперед!

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования