MFC的滑动条问题

(100分只是预付,解决问题了还有100分奉上)我定义了滑动条,设置了它的范围SetRange(64,66304)。然后运行程序,当滑动条获得焦点时滚动鼠标滚轴,随着滚着... (100分只是预付,解决问题了还有100分奉上)
我定义了滑动条,设置了它的范围SetRange(64, 66304)。
然后运行程序,当滑动条获得焦点时滚动鼠标滚轴,随着滚着的上下滚动,滑动条的游标会左右滑动。
问题来了:当滑动条的游标随鼠标滚轴的滚动而滑动时,最大只能滑动到32767,也就是说在64—32767范围内游标和滚轴联动,但是一旦到了32767再滚动鼠标滚轴,游标就没反应了。此时可以强行用鼠标拖动游标到32767—66304范围内,但是滚轴不起作用。
我想实现在64—66304范围内的游标和滑动条都联动怎么整啊??纠结中。。。
展开
 我来答
百度网友917c7ea
2010-11-26 · TA获得超过374个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:208万
展开全部
楼上两位说的似乎有道理,不过现在int为16位的系统基本没有了吧。
楼主的系统定义的int为多少位啊?我用的xp,int型是32位,我实验过,通过打印信息,可以滚动到66304。
我把我的过程说下,楼主参考下:
1、继承CSliderCtrl为CMySliderCtrl,在CMySliderCtrl响应OnMouseWheel,OnMouseWheel里的代码如下:
int nPos = GetPos();
TRACE("nFlags = %d, zDelta = %d, pt(%d, %d), nPos = %d\n", nFlags, zDelta, pt.x, pt.y, nPos);
if (zDelta > 0)
{
nPos += 1000;
if (nPos > GetRangeMax())
{
nPos = GetRangeMax();
}
}
else
{
nPos -= 1000;
if (nPos < GetRangeMin())
{
nPos = GetRangeMin();
}
}
SetPos(nPos);
2、在主窗口中OnInitDialog中设置范围SetRange(64, 66304),就可以了。
////////////////////////
如果楼主的系统int是16位,我有个方法解决你的问题,就是将你的最大值66304与32767进行映射,在代码里,滑动到32767,在界面上让它滚动到最后。
liaozi007bo
2010-11-25 · 超过25用户采纳过TA的回答
知道答主
回答量:99
采纳率:0%
帮助的人:53.3万
展开全部
SetScrollRange(int,int,bool);
说明 范围是-32768~32767
你超了int能范围了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wxmeng04
2010-11-25 · TA获得超过556个赞
知道小有建树答主
回答量:328
采纳率:0%
帮助的人:123万
展开全部
setrange 函数的参数时int型,最大范围是65535。程序对这个数自动进行了裁剪,实际上设置的数值根本不可能是66304。32767—66304这一段,你是怎么弄出来的? 另外当数值设到65535时,你用滚轮滑动,滑动几下滚动条根本不动,这个范围太大了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式