更新滚动条
| 192 | |
| 193 | // 更新滚动条 |
| 194 | void 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 | } |
nothing calls this directly
no test coverage detected