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

Method UpdateScrollBar

SOUI/src/control/SMCListView.cpp:194–280  ·  view source on GitHub ↗

更新滚动条

Source from the content-addressed store, hash-verified

192
193// 更新滚动条
194void SMCListView::UpdateScrollBar()
195{
196 CSize szView;
197 szView.cx = m_pHeader->GetTotalWidth();
198 szView.cy = m_lvItemLocator->GetTotalHeight();
199
200 CRect rcClient;
201 SWindow::GetClientRect(&rcClient);//不计算滚动条大小
202 rcClient.top+=GetHeaderHeight();
203 if(rcClient.bottom<rcClient.top)
204 rcClient.bottom=rcClient.top;
205 CSize size = rcClient.Size();
206 // 关闭滚动条
207 m_wBarVisible = SSB_NULL;
208
209 if (size.cy<szView.cy || (size.cy<szView.cy+GetSbWidth() && size.cx<szView.cx))
210 {
211 // 需要纵向滚动条
212 m_wBarVisible |= SSB_VERT;
213 m_siVer.nMin = 0;
214 m_siVer.nMax = szView.cy-1;
215 m_siVer.nPage = rcClient.Height();
216
217 if (size.cx-GetSbWidth() < szView.cx)
218 {
219 // 需要横向滚动条
220 m_wBarVisible |= SSB_HORZ;
221 m_siVer.nPage=size.cy-GetSbWidth() > 0 ? size.cy-GetSbWidth() : 0;//注意同时调整纵向滚动条page信息
222
223 m_siHoz.nMin = 0;
224 m_siHoz.nMax = szView.cx-1;
225 m_siHoz.nPage = (size.cx-GetSbWidth()) > 0 ? (size.cx-GetSbWidth()) : 0;
226 }
227 else
228 {
229 // 不需要横向滚动条
230 m_siHoz.nPage = size.cx;
231 m_siHoz.nMin = 0;
232 m_siHoz.nMax = m_siHoz.nPage-1;
233 m_siHoz.nPos = 0;
234 }
235 }
236 else
237 {
238 // 不需要纵向滚动条
239 m_siVer.nPage = size.cy;
240 m_siVer.nMin = 0;
241 m_siVer.nMax = size.cy-1;
242 m_siVer.nPos = 0;
243
244 if (size.cx < szView.cx)
245 {
246 // 需要横向滚动条
247 m_wBarVisible |= SSB_HORZ;
248 m_siHoz.nMin = 0;
249 m_siHoz.nMax = szView.cx-1;
250 m_siHoz.nPage = size.cx;
251 }

Callers

nothing calls this directly

Calls 6

GetClientRectFunction · 0.85
InvalidateFunction · 0.85
GetTotalWidthMethod · 0.45
GetTotalHeightMethod · 0.45
SizeMethod · 0.45
HeightMethod · 0.45

Tested by

no test coverage detected