请问,这里的id,是不是控件中的id?如果是,那为什么我改了资源中菜单的exit菜单项的id,(原来为IDM_EXIT,我改成IDM_EXIT1),编译照样过,也能执行;而改后面的消息映射表中的IDM_EXIT为IDM_EXIT1,就编译错误.

解决方案 »

  1.   

    IDM_EXIT和IDM_EXIT1是相等的//而改后面的消息映射表中的IDM_EXIT为IDM_EXIT1,就编译错误
    什么错误?
      

  2.   

    上述ID是莱单项的资源ID,在我的VC2003上,我建立了莱单项Test->TestC,并编辑创建其资源ID为IDC_TEST_C,于是在消息映射表中如下:BEGIN_MESSAGE_MAP(CVCTestNewView, CFormView)
         //......
         ON_COMMAND(IDC_TEST_C, OnTestC)
    END_MESSAGE_MAP()程序行为良好。再在资源编辑器中修改ID为IDC_TEST_C1,则程序仍可运行,但该莱单项没有可用的事件处理函数,莱单发灰不可用。修改上述消息映射表项,例如:BEGIN_MESSAGE_MAP(CVCTestNewView, CFormView)
         //......
         ON_COMMAND(IDC_TEST_C1, OnTestC)
    END_MESSAGE_MAP()则程序可以一如预期,完全符合逻辑,和你描述有异。所以,你的疑问,请检查一下是不是有误操作。
      

  3.   

    BEGIN_MESSAGE_MAP(CHelloApp, CWinApp)
    //{{AFX_MSG_MAP(CHelloApp)
    ON_COMMAND(ID_APP_ABOUT1, OnAppAbout)
    // NOTE - the ClassWizard will add and remove mapping macros here.
    //    DO NOT EDIT what you see in these blocks of generated code!
    //}}AFX_MSG_MAP
    // Standard file based document commands
    ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
    ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen)
    // Standard print setup command
    ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
    END_MESSAGE_MAP()
    ON_COMMAND(ID_APP_ABOUT1, OnAppAbout)资源管理器中菜单项的ID:ID_APP_ABOUT出现的错误是:
    --------------------Configuration: Hello - Win32 Debug--------------------
    Compiling resources...
    Compiling...
    Hello.cpp
    F:\vc\Hello\Hello.cpp(22) : error C2065: 'ID_APP_ABOUT1' : undeclared identifier
    Error executing cl.exe.Hello.exe - 1 error(s), 0 warning(s)
    我用的工具是:VC++ 6.0
      

  4.   

    你得改 rc文件里面的id   resource.h里面的id
    以及代码中的id
      

  5.   

    另外请教一下ON_COMMAND与函数OnCommand()什么关系.这里很混头,一会儿ON_COMMAND()消息队列,一会儿又OnCommand()通知处理函数.在ON_COMMAND()不是已经指定了处理函数了?
      

  6.   

    ON_COMMAND(id,mwmberFxn)
    是将id的触发消息分发给函数mwmberFxn处理,
    和OnCommand()没有关系
      

  7.   

    你改了菜单面的标识符后,原来旧的标识符在资源文件中仍然存在,所以之前的
     ON_COMMAND(IDM_EXIT, OnTestC) 不会报错,
    如果只是修改消息映射表中的IDM_EXIT为IDM_EXIT1,由于资源文件中不存在IDM_EXIT1的定义,所以报错.