我有一个C Win32程序
有一个消息处理函数,该函数具有切换语句来处理消息。
有一种现象使我惊讶……我将尽量用简单的话来解释。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");
}
(以上代码只是伪代码)在某个时刻,执行break之后的命令。例如
HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);
为什么?
谢谢
问题解决…
HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);
在这里执行,原因如下
HANDLE_MSG(是一个宏。当我查看它的定义时,我在WindowsX.h
中看到以下代码 #define HANDLE_MSG(hwnd, message, fn)
case (message): return HANDLE_##message((hwnd), (wParam), (lParam), (fn))
发生的是,宏HANDLE_MSG在开关的情况下。被替换为windowxp .h
中的代码作为另一种情况,因此执行时返回。
感谢每一个试图帮助我的人。
(Cup和dBase值得特别感谢)
的问候
只有当break语句在switch或switch case中的其他switch case中制动任何循环时才会发生这种情况。
如果你看到
HANDLE_MSG(hWnd, WM_COMMAND, Func_OC);
正在执行,那么"case 3 "必须执行。