Report样式的CListView无法滚动到指定行
用WM_VSCROLL来实现Report样式的CListView滚动到指定行(如100行).
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_THUMBPOSITION,100),NULL);
不成功。但:
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_LINEDOWN,0),NULL);//可以成功下滚1行。
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_PAGEDOWN,0),NULL);//可以成功下滚1页。
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_BOTTOM,0),NULL);//可以成功滚动到屏底。
但就是滚动不到指定行.
跟踪用鼠标拖滚动条时,进入了WM_VSCROLL消息响应函数4次:
nSBCode = SB_THUMBTRACK , nPos = 0
nSBCode = SB_THUMBTRACK, nPos = 100
nSBCode = SB_ THUMBPOSITION, nPos = 100
nSBCode = SB_ENDSCROLL, nPos = 0
模拟同样的参数发送了四次WM_VSCROLL消息:
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_THUMBTRACK,0),NULL);//
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_THUMBTRACK,100),NULL);//
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_THUMBPOSITION,100),NULL);//
::SendMessage(m_hWnd,WM_VSCROLL,MAKEWPARAM(SB_ENDSCROLL,0),NULL);//
进入了WM_VSCROLL消息响应函数跟踪的结果同上,但就是不滚屏,什么原因呀?
[解决办法]
CListCtrl控件自带的滚动条并不是CScrollBar控件,而是自己画上去的假窗口,因此实际上是通过CListCtrl的 GetScrollInfo和SetScrollInfo函数完成了滚动条位置信息的查询和设置.
调用SetScrollInfo试试.
如果是CListBox和CTree,这样调用
SendMessage(WM_VSCROLL, MAKELONG(SB_THUMBPOSITION, 10),NULL);
都是可以,楼主可以试试看?
[解决办法]
可以用EnsureVisible