本帖最后由 VisualEleven 于 2014-07-30 11:43:50 编辑

解决方案 »

  1.   

    你确定你的h文件中有这句?DECLARE_MESSAGE_MAP()
      

  2.   

    #define WM_MYMESSAGE  WM_USER+1
      

  3.   

    1 #define WM_MYMESSAGE (WM_USER+1)是预处理命令,不要写在类内
    注意{}配对情况及分号
      

  4.   

    Begins the definition of your message map. 
    BEGIN_MESSAGE_MAP(theClass, baseClass )
     
    目测是你的参数写反了, 有没有.
    BEGIN_MESSAGE_MAP(CXXDlg, CDialogEx)      //第一个参数是派生类, 第二个参数基类.要么就是有一个类它认不到, 导致这个宏展开出问题.
      

  5.   

    去掉ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage)后编译通过
    会不会是编译器或者设置的问题,我用的是VS2010,类向导-》消息-》添加自定义消息 并在头文件内定义消息后 编译仍不通过。
    仍然是ON_MESSAGE位置出错
      

  6.   

    #define WM_MYMESSAGE (WM_USER+1)
    是不是放到类里,放到类里,作用域受限了?
      

  7.   

    1.把消息映射的代码去的看看有没有错误。
    2.如果没有错误,ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage),&之前的空格是在汉字输入的情况下输入的么?
      

  8.   

    不是,是英文输入法下的逗号只是习惯性的在逗号前输了个空格。
    试了下相同代码在VC++ 6.0中编译通过,在vs2010下才会报出错误。
    有用VS的试一下你们的也是这个情况么?
      

  9.   

    还有木有发表下意见的
    总结下目前情况:
    1.代码如贴出内容,确定没有问题
    2.目前使用vs2010
    3.相同代码在vc++6.0中编译通过
    4.进一步验证 使用vs2010的 类向导-》消息-》添加自定义消息 仍无法编译通过问题是:为什么vs2010无法编译通过,需要怎样修改
      

  10.   

    不用&CXXDlg::OnMyMessage,直接用OnMyMessage呢?
      

  11.   

    我也试过直接用OnMyMessage,也是一样的情况
      

  12.   

    OK,其实很简单就是我前边贴出的部分,链接如下:
    http://download.csdn.net/detail/poetjun/7711969
      

  13.   

    楼主,我这边编译直接通过了建议
    #define WM_MYMESSAGE WM_USER+1
    改成
    #define WM_MYMESSAGE (WM_USER+1000)//后面的数字最好大一点,好像是要100+吧
    然后把这个定义放到.h中,最好清除一下工程,再Rebuild一下,good luck
      

  14.   

    1>------ Clean started: Project: ON_MESSAGE_Test, Configuration: Debug Win32 ------
    ========== Clean: 1 succeeded, 0 failed, 0 skipped ==========
    1>------ Rebuild All started: Project: ON_MESSAGE_Test, Configuration: Debug Win32 ------
    1>  stdafx.cpp
    1>  ON_MESSAGE_TestDlg.cpp
    1>  ON_MESSAGE_Test.cpp
    1>  Generating Code...
    1>  ON_MESSAGE_Test.vcxproj -> D:\My Documents\Downloads\ON_MESSAGE_Test\Debug\ON_MESSAGE_Test.exe
    ========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========
      

  15.   

    嗯,看来是vs设置问题,由于问题拖了比较久了就没有对比到底问题出在哪直接重装的vs。
      

  16.   

    这个地方加不加没影响吧,已经把括号去掉问题依旧
    纠正个说法大神可以忽略,新手一定要加括号。
    举个之前看到的例子:
    一、
    #define SQR (x) x * x
    假设x 的值是个表达式10+1,SQR (x)被替换后变成10+1*10+1。这并不是我们想要的
    二、
    #define SUM (x) (x)+(x)
    如果x 的值是个表达式5*3,而代码又写成这样:SUM (x)* SUM (x)。替换后变成:(5*3)+
    (5*3)*(5*3)+(5*3)
    所以最好的做法是里外层括号都不要省
      

  17.   

    同样问题啊,楼主怎么解决的?
    头文件添加DECLARE_MESSAGE_MAP(),和消息映射中添加ON_MESSAGE(*,*)两行都会下面有红线,表示错误,但是哪的错误呢?
    楼主能帮忙解答下吗?