求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]]