| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8754 人关注过本帖
标题:求setscrollrange 和setscrollsizes的区别
取消只看楼主 加入收藏
cumtzdhlx
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-7-8
收藏
 问题点数:0 回复次数:1 
求setscrollrange 和setscrollsizes的区别
setscrollrange 和setscrollsizes的区别
在WINDOWS程序设计书的第四章介绍了滚动条的用法,他用setscrollrange来设置滚动条的范围
BOOL SetScrollRange(
  HWND hWnd,    // handle to window
  int nBar,     // scroll bar
  int nMinPos,  // minimum scrolling position
  int nMaxPos,  // maximum scrolling position
  BOOL bRedraw  // redraw flag
);
在书中的程序中,在WM_CREATE消息响应函数中设置了滚动条的范围和初始化位置,setscrollrange(hwnd,SB_VERT,0,NUMLINES-1,TRUE),NUMLINES为75
然后在WM_VSCROLL消息中,当WPARAM的低字节为SB_LINEDOWN时,使当前位置+1,但总的范围不超过75,这是WIN32中滚动条操作.

在MFC中,C**View类派生于CScrollView,则应该在
void C**View::OnInitialUpdate()
{
    CScrollView::OnInitialUpdate();

    CSize sizeTotal;
    // TODO: calculate the total size of this view
    sizeTotal.cx = 0;
    sizeTotal.cy = 1900;
    SetScrollSizes(MM_TEXT, sizeTotal);
}
对滚动VIEW窗口设置大小,SetScrollSizes的作用就是如此,此时候我们会发现生成的程序是一个带有垂直滚动条的窗口,为了弄清楚setscrollrange 和setscrollsizes的区别,我在
void C**View::OnLButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    SetScrollRange(SB_VERT,0,75,TRUE);
        CScrollView::OnLButtonDown(nFlags, point);
}
中设置了滚动条滚动范围,和WINDOWS程序设计中的一样,我将其设置为75.
然后在
void CVscrollView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
    // TODO: Add your message handler code here and/or call default
    static int i=0;
         if(i<=74)
         {     
      if(nChar==VK_DOWN)
      {
        SetScrollPos(SB_VERT,++i,TRUE);
      }
         }
    CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}
按我的理解,滚动条范围被设置为75,而滚动窗口被设置为1900,那么当我按下下移箭头键时,窗口应该滚动1900/75个设备单位,而滚动条下移1,但是,实际运行结果为按下下移箭头键时,滚动条的确移动了1,而窗口也只是移动了1个设备单位,并且滚动条的范围好象不是75那么长,而是有1900的长度,所以每次下移的时候,移动很少的位置.
应该是我对其理解有问题请大家告诉我他们俩的区别,及其用法

[[it] 本帖最后由 cumtzdhlx 于 2008-3-23 17:45 编辑 [/it]]
搜索更多相关主题的帖子: int BOOL position scrolling VERT 
2008-03-23 17:44
cumtzdhlx
Rank: 1
等 级:新手上路
帖 子:53
专家分:0
注 册:2007-7-8
收藏
得分:0 
还是不懂啊 ,,,那我在上面的程序中调用一次SetScrollRange(SB_VERT,0,75,TRUE);的作用是什么..
难道说到74的地方滚动条就不能移动了吗
2008-03-23 19:29
快速回复:求setscrollrange 和setscrollsizes的区别
数据加载中...
 
   



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

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