标题:请教ON_COMMAND_RANGE问题
只看楼主
rfyin
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-24
 问题点数:0 回复次数:7 
请教ON_COMMAND_RANGE问题

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
......
ON_COMMAND_RANGE(ID_PIP_NW4,ID_PIP_SE4,OnPip)
ON_UPDATE_COMMAND_UI_RANGE(ID_PIP_NW4,ID_PIP_SE4,OnUpdatePip)
........
END_MESSAGE_MAP()
对应的消息处理函数如下,
void CMainFrame::OnPip(UINT nID)
{
iPosition=nID-ID_PIP_NW4;
...........
}
void CMainFrame::OnUpdatePip(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(iPosition==(pCmdUI->m_nID-ID_PIP_NW4));
}
在resource.h中:
#define ID_PIP_NW4 32772
#define ID_PIP_NE4 32773
#define ID_PIP_SW4 32774
#define ID_PIP_SE4 32775
这四个ID分别对应工具栏IDR_PIPTOOLBAR的四个按钮.
按道理这四个按钮通过ON_COMMAND_RANGE(ID_PIP_NW4,ID_PIP_SE4,OnPip)都影射了消息处理函数
可是不知道为什么我的ID_PIP_NW4按钮为什么还是灰色的,不能点击,截图如下:

望高人指点下,谢谢!

[此贴子已经被作者于2006-5-24 23:24:36编辑过]

搜索更多相关主题的帖子: PIP RANGE COMMAND pCmdUI CMainFrame 
2006-05-24 23:21
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 

你的Range的上限减下限是3,所以之显示3个。不过我感觉应该是最后一个不显示。无论如何,把上限加1或下限减1试一下就应该好了。
用ON_UPDATE_COMMAND_UI_RANGE这种命令的时候如果常数在resource.h里实在有点危险,因为resource.h和.rc都是随着编辑自动改的,以后添加点什么新东西没准就把这个顺序弄乱了。所以用RANGE的时候最好对不在resouce.h里的常数操作。我感觉你的project不需要用RANGE,直接把四个item的ON_UPDATE_COMMAND_UI映射到同一个函数就可以了。如果处理时稍有区别,需要知道那个nID,就写成四个函数,没什么难看的。

[此贴子已经被作者于2006-5-24 23:55:22编辑过]


http://myajax95./
2006-05-24 23:53
rfyin
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-24
得分:0 
哦,谢谢
可是我觉得ON_COMMAND_RANGE还是很有用的呀,所以就想搞明白
2006-05-25 10:49
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 
ON_COMMAND_RANGE一般是这样用的:用户激活一个menu的时候,你根据当时的具体情况加了N个item,於是用ON_COMMAND_RANGE来handle这N个item的点击事件。也就是说,和RANGE有关的是用来处理事先不知道的,动态变化的一组信息。

[此贴子已经被作者于2006-5-25 11:11:31编辑过]



http://myajax95./
2006-05-25 11:11
rfyin
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-24
得分:0 
可是ON_COMMAND_RANGE(id1,id2,memberfun )宏的ID范围不是从id1开始到id2结束吗,为什么还要"下限-1"或者"上限+1"呢
2006-05-25 11:21
myajax95
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:30
帖 子:2978
专家分:0
注 册:2006-3-5
得分:0 

我记得应该是id1~~id2-1,就象正常的C程序的逻辑for (int i = id1; i< id2; i++)


http://myajax95./
2006-05-25 11:27
rfyin
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-5-24
得分:0 
我也是参考了MSDN的资料,反正自己晕了,头都大了,都没心情在看下去了5555
2006-05-25 11:31
cathypu0725
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2006-5-26
得分:0 
ON_COMMAND_RANGE(id1,id2,memberfun )宏的ID范围是从id1开始到id2结束,你说的没错.程序写得也没错.
这种用法我用过的,肯定没问题的.
我觉得只有一种可能性,你的工具栏上第一个BUTTON的ID是不是写错了,不是你说的ID_PIP_NW4???
2006-05-26 10:44



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-66914-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.296948 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved