ON_MESSAGE问题,求讨论 本帖最后由 VisualEleven 于 2014-07-30 11:43:50 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你确定你的h文件中有这句?DECLARE_MESSAGE_MAP() #define WM_MYMESSAGE WM_USER+1 1 #define WM_MYMESSAGE (WM_USER+1)是预处理命令,不要写在类内注意{}配对情况及分号 Begins the definition of your message map. BEGIN_MESSAGE_MAP(theClass, baseClass ) 目测是你的参数写反了, 有没有.BEGIN_MESSAGE_MAP(CXXDlg, CDialogEx) //第一个参数是派生类, 第二个参数基类.要么就是有一个类它认不到, 导致这个宏展开出问题. 去掉ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage)后编译通过会不会是编译器或者设置的问题,我用的是VS2010,类向导-》消息-》添加自定义消息 并在头文件内定义消息后 编译仍不通过。仍然是ON_MESSAGE位置出错 #define WM_MYMESSAGE (WM_USER+1)是不是放到类里,放到类里,作用域受限了? 1.把消息映射的代码去的看看有没有错误。2.如果没有错误,ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage),&之前的空格是在汉字输入的情况下输入的么? 不是,是英文输入法下的逗号只是习惯性的在逗号前输了个空格。试了下相同代码在VC++ 6.0中编译通过,在vs2010下才会报出错误。有用VS的试一下你们的也是这个情况么? 还有木有发表下意见的总结下目前情况:1.代码如贴出内容,确定没有问题2.目前使用vs20103.相同代码在vc++6.0中编译通过4.进一步验证 使用vs2010的 类向导-》消息-》添加自定义消息 仍无法编译通过问题是:为什么vs2010无法编译通过,需要怎样修改 不用&CXXDlg::OnMyMessage,直接用OnMyMessage呢? 我也试过直接用OnMyMessage,也是一样的情况 OK,其实很简单就是我前边贴出的部分,链接如下:http://download.csdn.net/detail/poetjun/7711969 楼主,我这边编译直接通过了建议#define WM_MYMESSAGE WM_USER+1改成#define WM_MYMESSAGE (WM_USER+1000)//后面的数字最好大一点,好像是要100+吧然后把这个定义放到.h中,最好清除一下工程,再Rebuild一下,good luck 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.cpp1> ON_MESSAGE_TestDlg.cpp1> ON_MESSAGE_Test.cpp1> 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 ========== 嗯,看来是vs设置问题,由于问题拖了比较久了就没有对比到底问题出在哪直接重装的vs。 这个地方加不加没影响吧,已经把括号去掉问题依旧纠正个说法大神可以忽略,新手一定要加括号。举个之前看到的例子:一、#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)所以最好的做法是里外层括号都不要省 同样问题啊,楼主怎么解决的?头文件添加DECLARE_MESSAGE_MAP(),和消息映射中添加ON_MESSAGE(*,*)两行都会下面有红线,表示错误,但是哪的错误呢?楼主能帮忙解答下吗? 押宝赢了 来散个分 ALT事件 关于调用OnAmbientPropertyChanged的问题 转行,散分。分太都多也没有用,散了吧~~~~ 请问在XP下怎么解决扫描仪的输入图象问题。 如何在界面上设置各控件布局整齐? 如何将动态生成的CEdit颜色设置为黑色? 各位大虾:我从CHtmlView派生的类显示一个htm文件,打开后显示文件最上端,如何显示到文件底部? 求解,MFC问题,自定义窗口类接收不到WM_KEYDOWN消息 在消息处理函数中发送消息无法被处理,求大神解惑 在线程内部判断变量的值是否满足执行代码的条件,想知道有没有更好的方法 MFC中怎样限制编辑框输入数据的长度
注意{}配对情况及分号
BEGIN_MESSAGE_MAP(theClass, baseClass )
目测是你的参数写反了, 有没有.
BEGIN_MESSAGE_MAP(CXXDlg, CDialogEx) //第一个参数是派生类, 第二个参数基类.要么就是有一个类它认不到, 导致这个宏展开出问题.
会不会是编译器或者设置的问题,我用的是VS2010,类向导-》消息-》添加自定义消息 并在头文件内定义消息后 编译仍不通过。
仍然是ON_MESSAGE位置出错
是不是放到类里,放到类里,作用域受限了?
2.如果没有错误,ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage),&之前的空格是在汉字输入的情况下输入的么?
试了下相同代码在VC++ 6.0中编译通过,在vs2010下才会报出错误。
有用VS的试一下你们的也是这个情况么?
总结下目前情况:
1.代码如贴出内容,确定没有问题
2.目前使用vs2010
3.相同代码在vc++6.0中编译通过
4.进一步验证 使用vs2010的 类向导-》消息-》添加自定义消息 仍无法编译通过问题是:为什么vs2010无法编译通过,需要怎样修改
http://download.csdn.net/detail/poetjun/7711969
#define WM_MYMESSAGE WM_USER+1
改成
#define WM_MYMESSAGE (WM_USER+1000)//后面的数字最好大一点,好像是要100+吧
然后把这个定义放到.h中,最好清除一下工程,再Rebuild一下,good luck
========== 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 ==========
纠正个说法大神可以忽略,新手一定要加括号。
举个之前看到的例子:
一、
#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)
所以最好的做法是里外层括号都不要省
头文件添加DECLARE_MESSAGE_MAP(),和消息映射中添加ON_MESSAGE(*,*)两行都会下面有红线,表示错误,但是哪的错误呢?
楼主能帮忙解答下吗?