2015-09-16 2 views
2

Здесь, в случае коммутатора Я использую некоторые ключевые события.Могу ли я использовать корпус в другом корпусе в корпусе коммутатора в C

Когда я нажимаю он направляет Случай 0: и восходит к MainWindow у меня есть, закрыв второй-он (window2). И если я нажимаю , он направляет в Случай 1 и т. Д. Соответственно, где операции будут выполняться отдельно.

Мои ключевые события:

g_printerr("%s\n", gdk_keyval_name (event->keyval)); 
    keypressed=gdk_keyval_name (event->keyval); 
    printf("The KeyEvent is: %s\n", keypressed);  
    char ch[10]; 
    sprintf(ch, "%s\n", keypressed); 
    printf("The NewKeyEvent is: %s\n", ch); 
    int holdch=atoi(ch); 

переключатель Корпус:

switch(holdch) 
     { 
       case 0: 
        printf("Close Window2") 
       break; 
       case 1: 
        printf("Open Quadrant1"); 
       break; 
       case 2: 
        printf("Open Quadrant2"); 
       break; 
       case 3: 
        printf("Open Quadrant3"); 
       break; 
       case 4: 
        printf("Open Quadrant4"); 
       break; 
      }   

Теперь я хочу, чтобы закрыть операции получения бежать от Case (1-4) при работе и вернуться к Второе окно, откуда оно осталось.

Как это сделать? Можно ли использовать другие случаи внутри Корпус (1-4)? На этот раз я хочу использовать такие кнопки, как Esc или q для этого. Является ли это возможным?

Примечание:

Case 0 -> Закройте окно, в котором я сейчас и после этого нет никаких шансов на выполнение других случаев. В качестве второго окна находится окно, содержащее 4 квадранта.

Корпус (1-4) -> Все исполняют, но могут выполняться по одному.

+2

«Я хочу, чтобы закрыть операции получения бежать от случая (1-4) при запуске» Что это значит? Вы хотите прервать выполняемый код, или вы хотите вернуться после выполнения этого кода? – Lundin

+0

Я хочу прервать выполняемый код. Я не хочу возвращаться после ecexution. – djgharphalia07

+0

@kkk теги? Что использовать? – djgharphalia07

ответ

2

Там может быть другой switch заявления внутри случаев (вложенные инструкции переключателя случая). Пример:

switch(keyevent) { 
case 0: 
    printf("Close Window2") 
    break; 
case 1: 
    printf("Open Quadrant1"); 
    switch(foo) { 
    case 1: 
    // ... 
    } 
    break; 
    // ... 
} 

Но если я правильно понял ваш случай использования, я не думаю, что он вам нужен. Как бой что-то подобное:

switch(keyevent) { 
case 0: 
    printf("Close Window2") 
    break; 
case 1: 
    q1_is_open = true; 
    printf("Open Quadrant1"); 
    break; 
case 2: 
    q2_is_open = true; 
    printf("Open Quadrant2"); 
    break; 
case 3: 
    q3_is_open = true; 
    printf("Open Quadrant3"); 
    break; 
case 4: 
    q4_is_open = true; 
    printf("Open Quadrant4"); 
    break; 
case Q_BUTTON_PRESSED: 
    if (q1_is_open) { 
     printf("Close Quadrant1"); 
     q1_is_open = false; 
    } 
    if (q2_is_open) { 
     printf("Close Quadrant2"); 
     q2_is_open = false; 
    } 
    if (q3_is_open) { 
     printf("Close Quadrant3"); 
     q3_is_open = false; 
    } 
    if (q4_is_open) { 
     printf("Close Quadrant4"); 
     q4_is_open = false; 
    } 
    break; 
} 
+0

Awesome :) Но мое замешательство теперь я могу использовать Q как событие там? Мои ключевые значения являются целыми до сих пор. Я отредактирую и посмотрю, я показываю свои ключевые события. Как принять Q как событие, так что оно переходит к ** случаю Q_BUTTON_PRESSED: ** – djgharphalia07

+1

@ djgharphalia07 Вместо Q_BUTTON_PRESSED вы можете использовать свое целочисленное значение или '#define Q_BUTTON_PRESSED 42' – sergej

+0

Конечно, я попробую и дам вам знать. – djgharphalia07

1

Если вы хотите запустить свое главное-окно и код квадранта-окна последовательно вам нужно работать, что вы имеете в случаях 1-4 в отдельном потоке:

How do I start threads in plain C?

Код в этот поток должен иметь переключатель, который обрабатывает ключевые штрихи, которые вы хотите использовать для его выхода.

Вы можете вставлять операторы switch.

(Если это не поможет, то вам необходимо повторно слову на ваш вопрос.)

+1

Ваш ответ тоже информативный! И вы получаете награду :) – djgharphalia07

Смежные вопросы