执行break后的switch-case命令

时间:2014-06-10 06:34:38

标签: c switch-statement message

我有一个C Win32程序

有一个消息处理函数,它具有switch-case语句来处理消息。

有一种现象令我感到惊讶......我会用简单的语言解释。

switch (Message)
{
case 0:
    printf("Case 0 \n");
    break;
case 1:
    printf("Case 1 \n");
    break;
    printf("After Break Case 1 \n");
case 2:
     switch( WHAT_SC(wParam) ) {
        case 1:
        case 2:
           if (KEYBOARD_UNLOCKED()) {
             defstatus = DefWindowProc(hWnd, iMessage, wParam, lParam);
           }
           break;
        case 3:
           if (bLockWindowSize) {
              return (TRUE);
           }
        default:
            defstatus = DefWindowProc(hWnd, iMessage, wParam, lParam);
            break;
    }
    break;
    HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);
case 3:
    printf("Case 3 \n");
    break;
    printf("After Break Case 3 \n");
default :
    printf("default \n");
    break;
    printf("After Break default \n");
}

(上面的代码只是伪代码) 在某些时候,中断后的命令被执行。 即。

 HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);

为什么/怎么样?

谢谢

2 个答案:

答案 0 :(得分:1)

问题已解决......

 HANDLE_MSG(hWnd, WM_COMMAND, Func_OC); 

因为以下原因而在这里执行

HANDLE_MSG(是一个MACRO。 当我查看它的定义时,我在WindowsX.h中看到以下代码

 #define HANDLE_MSG(hwnd, message, fn)    \
     case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))

发生的情况是,交换机案例中的宏HANDLE_MSG被WindowxS.h中的代码替换。

这是另一种情况,因此会以返回执行。

感谢所有试图帮助我的人。

(Cup和dBase值得特别感谢)

此致 :(一个无能的程序员

答案 1 :(得分:0)

只有当break语句在开关或开关盒内的其他开关盒内制动任何环路时,才会发生这种情况。

如果你看到

 HANDLE_MSG(hWnd, WM_COMMAND, Func_OC); 

正在执行,然后“案例3”必须执行。