MCPcopy Create free account
hub / github.com/SOUI2/soui / UpdateScrollBar

Method UpdateScrollBar

SOUI/src/control/SListCtrl.cpp:250–338  ·  view source on GitHub ↗

///////////////////////////////////////////////////////////////////// 更新滚动条

Source from the content-addressed store, hash-verified

248//////////////////////////////////////////////////////////////////////////
249// 更新滚动条
250void SListCtrl::UpdateScrollBar()
251{
252 CSize szView;
253 szView.cx = m_pHeader->GetTotalWidth();
254 szView.cy = GetItemCount()*m_nItemHeight;
255
256 CRect rcClient;
257 SWindow::GetClientRect(&rcClient);//不计算滚动条大小
258 rcClient.top+=m_nHeaderHeight;
259
260 CSize size = rcClient.Size();
261 // 关闭滚动条
262 m_wBarVisible = SSB_NULL;
263
264 if (size.cy<szView.cy || (size.cy<szView.cy+GetSbWidth() && size.cx<szView.cx))
265 {
266 // 需要纵向滚动条
267 m_wBarVisible |= SSB_VERT;
268 m_siVer.nMin = 0;
269 m_siVer.nMax = szView.cy-1;
270 m_siVer.nPage = GetCountPerPage(FALSE)*m_nItemHeight;
271
272 if (size.cx-GetSbWidth() < szView.cx)
273 {
274 // 需要横向滚动条
275 m_wBarVisible |= SSB_HORZ;
276 m_siVer.nPage=size.cy-GetSbWidth() > 0 ? size.cy-GetSbWidth() : 0;//注意同时调整纵向滚动条page信息
277
278 m_siHoz.nMin = 0;
279 m_siHoz.nMax = szView.cx-1;
280 m_siHoz.nPage = size.cx-GetSbWidth() > 0 ? size.cx-GetSbWidth() : 0;
281 }
282 else
283 {
284 // 不需要横向滚动条
285 m_siHoz.nPage = size.cx;
286 m_siHoz.nMin = 0;
287 m_siHoz.nMax = m_siHoz.nPage-1;
288 m_siHoz.nPos = 0;
289 m_ptOrigin.x = 0;
290 }
291 }
292 else
293 {
294 // 不需要纵向滚动条
295 m_siVer.nPage = size.cy;
296 m_siVer.nMin = 0;
297 m_siVer.nMax = size.cy-1;
298 m_siVer.nPos = 0;
299 m_ptOrigin.y = 0;
300
301 if (size.cx < szView.cx)
302 {
303 // 需要横向滚动条
304 m_wBarVisible |= SSB_HORZ;
305 m_siHoz.nMin = 0;
306 m_siHoz.nMax = szView.cx-1;
307 m_siHoz.nPage = size.cx;

Callers

nothing calls this directly

Calls 5

GetClientRectFunction · 0.85
InvalidateFunction · 0.85
GetItemCountFunction · 0.50
GetTotalWidthMethod · 0.45
SizeMethod · 0.45

Tested by

no test coverage detected