用了ON_COMMAND_RANGE,但按钮都是灰的,怎么Enable他们呀?

soliii 2006-07-18 11:27:16
我在.h中添加了
//{{AFX_MSG(CSelDialogBar)
// NOTE: the ClassWizard will add member functions here
virtual void OnSelMsg(UINT nID);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()


在.cpp中添加了

BEGIN_MESSAGE_MAP(CSelDialogBar, CDialog)
//{{AFX_MSG_MAP(CSelDialogBar)
// NOTE: the ClassWizard will add message map macros here
ON_COMMAND_RANGE(IDC_SEL_A, IDC_SEL_A27, OnSelMsg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

为什么按钮出来都是灰的不可选呀?谢谢。
...全文
180 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
快乐鹦鹉 2006-07-18
  • 打赏
  • 举报
回复
看清楚对这个宏的说明:
ClassWizard does not support message map ranges, so you must place the macro yourself. Be sure to put it outside the message map 。
映射申明必须放到message map的外部。你放在了里面,就不可以了。
例子:
BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
// ...
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(ID_FILE_MENUITEM1, ID_FILE_MENUITEM3, OnFileMenuItems)
END_MESSAGE_MAP()
soliii 2006-07-18
  • 打赏
  • 举报
回复
搞定了,是消息映射的问题,看上去好像CDialogBar的消息不是发到Dialog上,而是发到Mainframe上。
xiaolizi 2006-07-18
  • 打赏
  • 举报
回复

问题解决了

1。打开resource.h,需要Range的ID的索引必须是连续的,因为在编辑ID的时候,如果修改过,或者中间插入过其他ID,则ClassWizard可能会产生不连续的ID,此时在范围之外的ID的按钮就变成灰色了。
2。需要Rebuild项目

xiaolizi 2006-07-18
  • 打赏
  • 举报
回复
支持一下楼主,我也正好碰到这个问题,比如通过ClassWizard增加的消息事件,按钮是正常的,然后自己加入ON_COMMAND_RANGE把2个消息合并成一个,结果按钮就变成灰色了
soliii 2006-07-18
  • 打赏
  • 举报
回复
还是不行呀
gdsdyl 2006-07-18
  • 打赏
  • 举报
回复
楼上正解,来晚了

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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