///////////////////////////////////////////////////////////////////// 更新滚动条
| 248 | ////////////////////////////////////////////////////////////////////////// |
| 249 | // 更新滚动条 |
| 250 | void 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; |
nothing calls this directly
no test coverage detected