设置滚动条向下滚动


1.  文本框

用途说明:

在文本框中打印日志,或向ListCtrl中插入数据时,怎么样可以把滚动条时时滚动到最后一行,这样便可看到添加的新数据内容。


方法I:

CWnd  *pWnd = GetDlgItem(IDC_EDIT1);
HWND g_hLog = pWnd->GetSafeHwnd();
::SendMessage(g_hLog, WM_VSCROLL, MAKEWPARAM(SB_BOTTOM,0), 0);

方法II:

HWND g_hLog = ::GetDlgItem(m_hWnd, IDC_EDIT1);
::SendMessage(g_hLog, WM_VSCROLL, MAKEWPARAM(SB_BOTTOM,0), 0);

方法III:

CWnd* g_CWnd = GetDlgItem(IDC_EDIT1);
int nLineCount = ((CEdit*)g_cWnd)->GetLineCount();
((CEdit*)g_cWnd)->LineScroll(nLineCount);


2. ListCtrl

说明:

比如你找查找某一行(或者对某一行数据做处理),而此行并在listctrl当前可视范围内并不可见。当你查找这条记录时,你可能想要自动进行选中高亮显示,并且将此行自动滚动到可视范围内,而不想去手动拖动滚动条找到此行,你可以试试一下方法:

(1) 自动选中某行的方法:

选中高亮:

m_list.SetItemState(nItem, LVIS_SELECTED, LVIS_SELECTED);

或:m_list.SetItemState(nItem, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);

去选中高亮:

m_List.SetItemState(nItem, 0, LVIS_SELECTED);


(2)自动滚动列表,让指定行在区域内可见的方法:

注意:指定行在列表区域内可见,并非选中行

方法I:滚动到指定行

m_ListCtrl->EnsureVisible(nItem, TRUE);

第二个参数:如果为 false,则该项在列表区域内部分可见时不会发生滚动。如果为 true,则滚动条会自动滚动使该项完全在窗口区域内可见。


方法II:滚动到列表的末尾

加完数据后执行:  
m_ListCtrl.SendMessage(WM_VSCROLL, SB_BOTTOM, NULL);  
或全局
::SendMessage(g_hList, WM_VSCROLL, MAKEWPARAM(SB_BOTTOM,0), 0);

方法III:滚动到列表的末尾
m_ListCtrl.SetFocus();
  
//设置最后一行被选中  
m_ListCtrl.SetItemState(m_ListCtrlLog.GetItemCount() - 1,    
                        LVIS_ACTIVATING | LVIS_FOCUSED | LVIS_SELECTED,      
                        LVIS_SELECTED   | LVIS_FOCUSED);  
//滚动到最后一行  
m_ListCtrl.Scroll(CSize(0, 100000));  


例如:

m_wndList.SetItemState(k, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);  //先选中行

m_wndList.EnsureVisible(k, FALSE);  //再滚动到行


你可能感兴趣的:(设置滚动条向下滚动)