MFC的滑动条问题
(100分只是预付,解决问题了还有100分奉上)我定义了滑动条,设置了它的范围SetRange(64,66304)。然后运行程序,当滑动条获得焦点时滚动鼠标滚轴,随着滚着...
(100分只是预付,解决问题了还有100分奉上)
我定义了滑动条,设置了它的范围SetRange(64, 66304)。
然后运行程序,当滑动条获得焦点时滚动鼠标滚轴,随着滚着的上下滚动,滑动条的游标会左右滑动。
问题来了:当滑动条的游标随鼠标滚轴的滚动而滑动时,最大只能滑动到32767,也就是说在64—32767范围内游标和滚轴联动,但是一旦到了32767再滚动鼠标滚轴,游标就没反应了。此时可以强行用鼠标拖动游标到32767—66304范围内,但是滚轴不起作用。
我想实现在64—66304范围内的游标和滑动条都联动怎么整啊??纠结中。。。 展开
我定义了滑动条,设置了它的范围SetRange(64, 66304)。
然后运行程序,当滑动条获得焦点时滚动鼠标滚轴,随着滚着的上下滚动,滑动条的游标会左右滑动。
问题来了:当滑动条的游标随鼠标滚轴的滚动而滑动时,最大只能滑动到32767,也就是说在64—32767范围内游标和滚轴联动,但是一旦到了32767再滚动鼠标滚轴,游标就没反应了。此时可以强行用鼠标拖动游标到32767—66304范围内,但是滚轴不起作用。
我想实现在64—66304范围内的游标和滑动条都联动怎么整啊??纠结中。。。 展开
展开全部
楼上两位说的似乎有道理,不过现在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,在界面上让它滚动到最后。
楼主的系统定义的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,在界面上让它滚动到最后。
展开全部
SetScrollRange(int,int,bool);
说明 范围是-32768~32767
你超了int能范围了
说明 范围是-32768~32767
你超了int能范围了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
setrange 函数的参数时int型,最大范围是65535。程序对这个数自动进行了裁剪,实际上设置的数值根本不可能是66304。32767—66304这一段,你是怎么弄出来的? 另外当数值设到65535时,你用滚轮滑动,滑动几下滚动条根本不动,这个范围太大了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询