我可以在C

时间:2015-09-16 07:37:09

标签: c switch-statement gtk keyevent

在这里,在Switch Case我正在使用一些关键事件。

当我按 0 时,它会指向案例0:,并通过关闭第二个(Window2)返回到我所拥有的MainWindow。 如果我按 1 ,它会分别指向案例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;
           }        

现在,我想在运行时关闭从案例(1-4)运行的操作,然后返回到之前离开的第二个窗口。

怎么做?可以在案例(1-4)中使用其他案例吗?这次我想使用 Esc q 等关键按钮。有可能吗?

注意:

案例0 - >关闭我现在的窗口,在此之后没有机会执行其他情况。由于第二窗口是包含4个象限的窗口。

案例(1-4) - >所有这些都是可执行的,但可以一次执行一次。

2 个答案:

答案 0 :(得分:3)

案例中可能有另一个switch语句(嵌套的switch case语句)。例如:

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;
} 

答案 1 :(得分:1)

如果要按顺序运行主窗口和象限窗口代码,则需要在单独的线程中运行案例1-4中的任何内容:

How do I start threads in plain C?

该线程中的代码必须有一个开关,用于处理您要用于退出它的击键。

您可以嵌套切换语句。

(如果这没有用,那么你需要重新提出你的问题。)