我有一个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);
为什么/怎么样?
谢谢
答案 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”必须执行。