ON_MESSAGE问题,求讨论

poetjun 2014-07-30 11:32:57
百思不得其解,看了下不存在define中多个 ; 问题,大家帮看下问题出在哪里
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
.h中
#define WM_MYMESSAGE (WM_USER+1)
protected:
HICON m_hIcon;
// 生成的消息映射函数
virtual BOOL OnInitDialog();
afx_msg LRESULT OnMyMessage(WPARAM wParam, LPARAM lParam);
DECLARE_MESSAGE_MAP()

.cpp中
BEGIN_MESSAGE_MAP(CXXDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_WM_DROPFILES()
ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage)
END_MESSAGE_MAP()

LRESULT CXXDlg::OnMyMessage(WPARAM wParam,LPARAM lParam)
{
return 0;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
错误列表:
错误 2 error C2059: 语法错误:“,”
错误 4 error C2059: 语法错误:“}”
错误 6 error C2059: 语法错误:“}”
错误 11 error C2059: 语法错误:“}”
错误 1 error C2059: 语法错误:“<”
错误 10 error C2059: 语法错误:“return”
错误 9 error C2065: “_messageEntries”: 未声明的标识符
错误 8 error C2065: “GetThisMessageMap”: 未声明的标识符
错误 12 error C2143: 语法错误 : 缺少“;”(在“{”的前面)
错误 5 error C2143: 语法错误 : 缺少“;”(在“}”的前面)
错误 3 error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
错误 13 error C2447: “{”: 缺少函数标题(是否是老式的形式表?)
错误 7 error C2653: “TheBaseClass”: 不是类或命名空间名称
...全文
624 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
同样问题出现,楼主如何解决的啊。我的工作2015年8月10日还正确的,现在电脑上所有包含ON_MESSAGE的工程都出现这个错误了,vs2012版的
elisen 2015-08-10
  • 打赏
  • 举报
回复
去掉&,一般情况下带个&和不带&是一样的,但是由于ON_MESSAGE本身已经在它定义里有个&了,翻译过后会变成 &&CMainFrame::OnCapAction,从而导致错误
lixu0828 2014-10-07
  • 打赏
  • 举报
回复
同样问题啊,楼主怎么解决的? 头文件添加DECLARE_MESSAGE_MAP(),和消息映射中添加ON_MESSAGE(*,*)两行都会下面有红线,表示错误,但是哪的错误呢? 楼主能帮忙解答下吗?
凌乱哥 2014-08-04
  • 打赏
  • 举报
回复
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 ==========
凌乱哥 2014-08-04
  • 打赏
  • 举报
回复
楼主,我这边编译直接通过了 建议 #define WM_MYMESSAGE WM_USER+1 改成 #define WM_MYMESSAGE (WM_USER+1000)//后面的数字最好大一点,好像是要100+吧 然后把这个定义放到.h中,最好清除一下工程,再Rebuild一下,good luck
poetjun 2014-08-04
  • 打赏
  • 举报
回复
引用 24 楼 dingxz105090 的回复:
最后一个办法,工程压缩下传上来,大家看看,我正好有VS2010
OK,其实很简单就是我前边贴出的部分,链接如下: http://download.csdn.net/detail/poetjun/7711969
vcf_reader 2014-08-04
  • 打赏
  • 举报
回复
有些怀疑是你的逗号不是英文逗号
凌乱哥 2014-08-04
  • 打赏
  • 举报
回复
最后一个办法,工程压缩下传上来,大家看看,我正好有VS2010
poetjun 2014-08-04
  • 打赏
  • 举报
回复
引用 22 楼 vcf_reader 的回复:
第一个错误指向哪一行?
ON_MESSAGE所在行
vcf_reader 2014-08-04
  • 打赏
  • 举报
回复
第一个错误指向哪一行?
poetjun 2014-08-04
  • 打赏
  • 举报
回复
引用 4 楼 poetjun 的回复:
[quote=引用 2 楼 shen_wei 的回复:] #define WM_MYMESSAGE WM_USER+1
这个地方加不加没影响吧,已经把括号去掉问题依旧[/quote] 纠正个说法大神可以忽略,新手一定要加括号。 举个之前看到的例子: 一、 #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) 所以最好的做法是里外层括号都不要省
poetjun 2014-08-04
  • 打赏
  • 举报
回复
引用 27 楼 dingxz105090 的回复:
楼主,我这边编译直接通过了 建议 #define WM_MYMESSAGE WM_USER+1 改成 #define WM_MYMESSAGE (WM_USER+1000)//后面的数字最好大一点,好像是要100+吧 然后把这个定义放到.h中,最好清除一下工程,再Rebuild一下,good luck
嗯,看来是vs设置问题,由于问题拖了比较久了就没有对比到底问题出在哪直接重装的vs。
poetjun 2014-08-01
  • 打赏
  • 举报
回复
引用 20 楼 flydreamGG 的回复:
不用&CXXDlg::OnMyMessage,直接用OnMyMessage呢?
我也试过直接用OnMyMessage,也是一样的情况
昨夜无风 2014-07-31
  • 打赏
  • 举报
回复
不用&CXXDlg::OnMyMessage,直接用OnMyMessage呢?
沉默的梦南 2014-07-31
  • 打赏
  • 举报
回复
我用的是VC6.0 没问题 通过的了
poetjun 2014-07-31
  • 打赏
  • 举报
回复
引用 13 楼 arpnet99 的回复:
1.把消息映射的代码去的看看有没有错误。 2.如果没有错误,
ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage)
,&之前的空格是在汉字输入的情况下输入的么?
同时,为了排除敲错代码的可能 使用 vs2010的 类向导-》消息-》添加自定义消息 仍无法编译通过。
poetjun 2014-07-31
  • 打赏
  • 举报
回复
引用 13 楼 arpnet99 的回复:
1.把消息映射的代码去的看看有没有错误。 2.如果没有错误,
ON_MESSAGE(WM_MYMESSAGE ,&CXXDlg::OnMyMessage)
,&之前的空格是在汉字输入的情况下输入的么?
不是,是英文输入法下的逗号只是习惯性的在逗号前输了个空格。 试了下相同代码在VC++ 6.0中编译通过,在vs2010下才会报出错误。 有用VS的试一下你们的也是这个情况么?
poetjun 2014-07-31
  • 打赏
  • 举报
回复
引用 18 楼 poetjun 的回复:
还有木有发表下意见的 总结下目前情况: 1.代码如贴出内容,确定没有问题 2.目前使用vs2010 3.相同代码在vc++6.0中编译通过 4.进一步验证 使用vs2010的 类向导-》消息-》添加自定义消息 仍无法编译通过 问题是:为什么vs2010无法编译通过,需要怎样修改
Hello?
poetjun 2014-07-31
  • 打赏
  • 举报
回复
还有木有发表下意见的 总结下目前情况: 1.代码如贴出内容,确定没有问题 2.目前使用vs2010 3.相同代码在vc++6.0中编译通过 4.进一步验证 使用vs2010的 类向导-》消息-》添加自定义消息 仍无法编译通过 问题是:为什么vs2010无法编译通过,需要怎样修改
poetjun 2014-07-31
  • 打赏
  • 举报
回复
引用 16 楼 chenmodexiaoduoshu 的回复:
我用的是VC6.0 没问题 通过的了
是的 我也试过VC6.0没问题
加载更多回复(13)

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧