首页
社区
课程
招聘
SDK纳闷switch用法
发表于: 2006-4-5 14:10 7194

SDK纳闷switch用法

2006-4-5 14:10
7194

switch (message)
{
case WM_INITDIALOG:
     return TRUE;

case WM_COMMAND:
     if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
                EndDialog(hDlg, LOWORD(wParam));
                return TRUE;
        }

纳闷为什么要用return TRUE;而不用break呢

这样一个消息不是要一直执行到底啊

再请教个问题静态变量和全局变量具体区别在哪


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 47147
活跃值: (20445)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
这是一个处理消息的循环,windows程序特点,不断循环执行。
静态变量又称局部变量,在子程序内部说明的变量,其作用域是其所在的子程序。
全局变量可以在整个程序中调用。
2006-4-5 14:46
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
3
//改成这样效果也一样。
switch (message)
{
  case WM_INITDIALOG:
     break;
  case WM_COMMAND:
     if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
    {
      EndDialog(hDlg, LOWORD(wParam));
      break;
    }
  default
    return FALSE;
}
return TRUE;
2006-4-5 15:19
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
对于C语言来说:
静态变量和全局变量的区别在于作用域和出生期不一样---我的理解。
2006-4-5 16:54
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
5
关于break和return要看整个函数内容了,就是看switch后面有没有代码,如果还有要执行的代码,那么break后就去执行代码,但如果是return就直接返回了,后面的代码不会得到执行。

通俗地说静态变量只初始化一次,呵呵。比如下面的代码:

for (int i = 0; i < 3; i++)
{
        static int n = 3;
        n++;
        printf("\n%d\n", n);
}

看看会得到什么就知道了。
2006-4-6 11:13
0
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
受用,谢谢大家的讲解,
可能我没问清楚,是这样的平常我们用switch一般一个条件只对应一个case语句,然后用break跳出防止执行下面无关case语句,但是我发现SDK里面用到return TRUE,他到底和break有什么联系,或者在SDK里面switch完全有不同的用法
2006-4-7 15:30
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
7
WndProc ( 参数 1,2,3,4)
{
   switch (message)
   {
     case WM_INITDIALOG:
        return TRUE;

     case WM_COMMAND:
        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
        {
           EndDialog(hDlg, LOWORD(wParam));
           return TRUE;
         }
     }
  return false;


return true只是为了表示对该消息已经处理。否则还会把消息传递给系统默认的处理过程。

switch语句中一般用的是break,这是因为通常在switch语句后还需要作额外的处理,此时就需要break,表示结束switch 但不结束 这个函数
然而在消息 处理过程中,通常情况下只有switch语句和最后的一个RETURN语句,如果用break的 话,接下来还需要继续执行最后一个return语句 。

一般在SDK中处理完特定的 消息就可以 直接返回,false表示需要继续传递给系统默认的消息处理过程,true就表示对该消息的处理已经完成。

switch 语法在SDK与VC中没有区别
2006-4-7 15:50
0
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
谢谢,前面是我没问清楚
2006-4-7 17:48
0
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
9
最初由 llac 发布
受用,谢谢大家的讲解,
可能我没问清楚,是这样的平常我们用switch一般一个条件只对应一个case语句,然后用break跳出防止执行下面无关case语句,但是我发现SDK里面用到return TRUE,他到底和break有什么联系,或者在SDK里面switch完全有不同的用法


晕了,你完全没懂我们说的。
2006-4-7 20:00
0
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
呵呵,理解误差
刚接触SDK不久,有些东西还比较迷糊,谢谢你们的讲解
2006-4-8 14:02
0
雪    币: 1852
活跃值: (504)
能力值: (RANK:1010 )
在线值:
发帖
回帖
粉丝
11
不急,刚开始就这样
2006-4-8 20:34
0
雪    币: 214
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谢谢鼓励
在我能力下我尽可能为这个版块贡献一份力量
2006-4-9 11:10
0
游客
登录 | 注册 方可回帖
返回
//