第一个问题是不是bug 呀?
第二个问题是将不处理的消息交给基类处理

解决方案 »

  1.   

    再请问
    这里的  WM_SYSCOMMAND 发送了 我在 对话框左上角 单击产生的  “关于” 消息,对么?那么,单击对话框 右上角 的   X   标记,发送的又是什么消息?谢谢!
      

  2.   

    for csdnflysnow:第一个问题 决不是 bug,MSDN 中写的清楚;第二个详细一点 OK?
      

  3.   

    程序的系统菜单响应函数
    nID & 0xFFF0) == IDM_ABOUTBOX是判断是否选择了"about"菜单!
      

  4.   

    I don't understand Qestion NO.1
    why MFC using a way like that?Wait for exporters to analyze!  
      

  5.   

    nID & 0xFFF0 将nID末四位置零。可能nID末四位包含的是其他信息。
    第二个问题:CSpeakerDlg::OnSysCommand只处理IDM_ABOUTBOX消息,不处理其他,所以交给默认的处理函数处理,CDialog::OnSysCommand就是默认的处理函数。这就是C++重用代码的方法之一:继承。
      

  6.   

    TsuLeon() :
        Do you know digital logic?panda_w(好想睡啊!) :
        nID & 0xFFF0) == IDM_ABOUTBOX是判断是否选择了"about"菜单  // 这一句 能否详细一些?panda_w(好想睡啊!) : thank you!  是不是每个程序都这样?
      

  7.   

    (nID & 0xFFF0) == IDM_ABOUTBOX 
    is a bug, at least not a good programming practice.
    it should write like this
    (nID & IDM_ABOUTBOX ) == IDM_ABOUTBOX
     
      

  8.   

    由于在对话框的初始化代码中,程序在系统菜单中添加了"关于"项.程序在处理WM_SYSCOMMAND时先判断用户是否点击"关于",如果是就显示"关于"对话框,否则就调用基类的OnSysCommand().如果不调用基类的OnSysCommand(),当用户点击别的菜单项(比如说"关闭"),就得不到响应.你可以试一下.至于为什么要将nID和FFF0H相与再和IDM_ABOUTBOX相比较是因为nID末四位包含的是其他信息,而IDM_ABOUTBOX的末四位在定义时也为0,你可以看看定义IDM_ABOUTBOX的头文件.
      

  9.   

    thank you!边城浪子  and LongWay(不要分的菜鸟)
      

  10.   

    请关注一下:http://www.csdn.net/expert/topic/345/345130.shtm一个关于记录打印机打印信息的技术问题,这对我非常难,你能帮我解决吗?
      

  11.   

    nID 的值msdn上不是有规定吗,such as:SC_MOVE,SC_MAXIMISE,SC_CLOSE etc,怎么会是IDM_ABOUTBOX呢??
      

  12.   

    oh,I see now
    but I must discover something wrong made by LongWay(不要分的菜鸟):
    (nID & IDM_ABOUTBOX ) == IDM_ABOUTBOX will get wrong result;
    for example: nID now is 1110,IDM_ABOUTBOX is 1000,then nID&IDM_ABOUTBOX will get 1000, equal to IDM_ABOUTBOX,but nID&0xF will get 1110,different from IDM_ABOUTBOX.S0 nID & 0xFFF0) == IDM_ABOUTBOX  is not a bug,but a right fragment。
      

  13.   

    第二个:知道DefWindowProc(.....)么,意思差不多,就是不作特殊处理,只需基类来处理一把。