急救!!!正在用MFC写的程序中,某按钮控件单击消息突然不响应此按钮的单击动作了!!!???

school 2005-09-06 12:07:26
在响应单击消息的成员函数的最开始加入了
MessageBox("AAAA");
加以验证,结果没反应。
好象单击动作根本就没有导致程序执行相关函数代码。

其他按钮都正常!!!

检查xxxDlg.h

afx_msg void OnButtonTargetInquire();

检查xxxDlg.cpp

ON_BN_CLICKED(IDC_BUTTON_TARGET_INQUIRE, OnButtonTargetInquire)

void CLotteryShrinkDlg::OnButtonTargetInquire()
{
MessageBox("AAAA");
...
}

检查Resource.h

#define IDC_BUTTON_TARGET_INQUIRE 1011

且在“资源视图”中双击此按钮控件可以正常转入与单击消息关联的函数代码部分“void CLotteryShrinkDlg::OnButtonTargetInquire()”

这是这么回事???如何解决???
...全文
400 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
school 2005-09-07
  • 打赏
  • 举报
回复
"看来只要找到匹配的消息处理函数就跳出了",学习中。。。

我原想消息可能是并连的,就是一个操作可以激发两个消息。如点击窗口最大化按钮将导致WM_SIZEHE和WN_PAINT消息。原来他们是串连的,先发送WM_SIZEHE消息,调用OnSize之类的函数调整窗口大小,再在OnSize代码中调用UpdateWindow之类的导致客户区等无效的函数时发送一个WN_PAINT消息重画客户区等。


请明白人多关注!!!这样理解对吗???千万别让我形成错误观念!!!
whslovexyp 2005-09-07
  • 打赏
  • 举报
回复
看来还是消息响应的问题.
醉梦书生 2005-09-07
  • 打赏
  • 举报
回复
我觉得应该是和你放置的顺序有关,先检索了ON_BN_CLICKED而且匹配了,当然就不会在去检索后面的了,呵呵,个人观点
bobob 2005-09-07
  • 打赏
  • 举报
回复
看来只要找到匹配的消息处理函数就跳出了,学习了
school 2005-09-07
  • 打赏
  • 举报
回复
ON_COMMAND_RANGE消息在ON_BN_CLICKED消息前可以将其屏蔽,这是怎么回事???知道的可以说说吗!!!???

是不是ON_COMMAND_RANGE消息是按钮控件父窗口的消息,优先级高所以可以将之屏蔽???!!!

太霸道了吧!
school 2005-09-07
  • 打赏
  • 举报
回复
感谢大家的支持!!!这个问题我已经自己解决了。

我又重新仔细检查了Resource.h和xxxDlg.cpp文件

发现在Resource.h文件中有如下资源(ID值)排列顺序
#define IDC_BUTTON_01 1002
...
#define IDC_BUTTON_TARGET_INQUIRE 1011 //这就是问题按钮控件的ID(1002<1011<1051)
...
#define IDC_BUTTON_40 1051

而我曾为IDC_BUTTON_01~IDC_BUTTON_40手动添加过一个ON_COMMAND_RANGE消息处理如下
ON_COMMAND_RANGE(IDC_BUTTON_01, IDC_BUTTON_40, OnNumberButton)

检查MESSAGE_MAP宏对中消息的排列顺序发现如下
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
...
ON_COMMAND_RANGE(IDC_BUTTON_01, IDC_BUTTON_40, OnNumberButton)
...
ON_BN_CLICKED(IDC_BUTTON_TARGET_INQUIRE, OnButtonTargetInquire)
...

于是问题明显了,原来ON_COMMAND_RANGE消息关联了由IDC_BUTTON_01到IDC_BUTTON_40之间所有ID值,其中也包括了有问题的按钮IDC_BUTTON_TARGET_INQUIRE的ID值。

于是,当我单击IDC_BUTTON_TARGET_INQUIRE按钮时,首先发送了一个ON_COMMAND_RANGE消息,执行OnNumberButton函数,从而屏蔽了ON_BN_CLICKED消息及对OnButtonTargetInquire函数的执行,而OnNumberButton函数中又没有对IDC_BUTTON_TARGET_INQUIRE按钮的相应处理代码,所以看上去好象什么反应也没有。

只需将
ON_BN_CLICKED(IDC_BUTTON_TARGET_INQUIRE, OnButtonTargetInquire)
插入到
ON_COMMAND_RANGE(IDC_BUTTON_01, IDC_BUTTON_40, OnNumberButton)
之前,就一切OK了。

或者,将Resource.h中的ID资源调整一下,使IDC_BUTTON_01~IDC_BUTTON_40的ID值间不包含其他ID。

这里又有一个新问题,ON_COMMAND_RANGE消息在ON_BN_CLICKED消息前可以将其屏蔽,这是怎么回事???知道的可以说说吗!!!???
中级伴读 2005-09-07
  • 打赏
  • 举报
回复
估计是资源ID的问题
i_noname 2005-09-06
  • 打赏
  • 举报
回复
rebuild all试试
school 2005-09-06
  • 打赏
  • 举报
回复
程序编译连接通过后运行,单击此按钮,按钮获得焦点,可什么反应也没有,连加在单击事件关联的函数“OnButtonTargetInquire()”开头的“MessageBox("AAAA");”的消息框也没有弹出来!!!
但是,其他按钮一切正常!!!

救救我!!!
Steven7 2005-09-06
  • 打赏
  • 举报
回复
你的处理函数是自己手工加的?
BEGIN MESSAGE宏对中没有加入
或者是消息路由问题,但可能性小
zxyjyzxyjy 2005-09-06
  • 打赏
  • 举报
回复
或许这个按钮所使用的ID是不是同其它按钮相同,或者是一个隐藏起来的按钮什么的已以处理了该点击事件,仔细查查。
lixiaosan 2005-09-06
  • 打赏
  • 举报
回复
删除.dsw .ncb .clw .opt 以及debug目录
然后rebuild all
fisker0303 2005-09-06
  • 打赏
  • 举报
回复
断点跟踪,仔细检查代码,应该还是你代码有问题。
笑傲IT 2005-09-06
  • 打赏
  • 举报
回复
按步骤重新新建一个工程试试,看看可不可以
legendhui 2005-09-06
  • 打赏
  • 举报
回复
你设置几个断点,看看消息映射是否执行了!

16,471

社区成员

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

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

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