MCPcopy Create free account
hub / github.com/BeneficialCode/WinArk / OnVScroll

Method OnVScroll

WinArk/HexControl.cpp:364–418  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

362}
363
364LRESULT CHexControl::OnVScroll(UINT, WPARAM wParam, LPARAM, BOOL&) {
365 SCROLLINFO si;
366 si.cbSize = sizeof(si);
367 si.fMask = SIF_ALL;
368 GetScrollInfo(SB_VERT, &si);
369 auto pos = si.nPos;
370
371 switch (LOWORD(wParam)) {
372 case SB_TOP:
373 si.nPos = si.nMin;
374 break;
375
376 case SB_BOTTOM:
377 si.nPos = si.nMax;
378 break;
379
380 case SB_LINEUP:
381 si.nPos--;
382 break;
383
384 case SB_LINEDOWN:
385 si.nPos++;
386 break;
387
388 case SB_PAGEUP:
389 si.nPos -= si.nPage;
390 break;
391
392 case SB_PAGEDOWN:
393 si.nPos += si.nPage;
394 break;
395
396 case SB_THUMBTRACK:
397 si.nPos = si.nTrackPos;
398 break;
399 }
400 if (si.nPos != pos) {
401 si.fMask = SIF_POS;
402 SetScrollInfo(SB_VERT, &si);
403 GetScrollInfo(SB_VERT, &si);
404 m_StartOffset = si.nPos * m_BytesPerLine;
405 if (m_StartOffset + m_Lines * m_BytesPerLine >= m_Buffer->GetSize()) {
406 m_StartOffset = m_Buffer->GetSize() - (m_Lines - 1) * m_BytesPerLine;
407 if (m_StartOffset < 0)
408 m_StartOffset = 0;
409 m_StartOffset = m_StartOffset - m_StartOffset % m_BytesPerLine;
410 ATLASSERT(m_StartOffset >= 0);
411 }
412 m_EndOffset = m_StartOffset + m_Lines * m_BytesPerLine;
413 if (m_EndOffset > m_Buffer->GetSize())
414 m_EndOffset = m_Buffer->GetSize();
415 RedrawWindow();
416 }
417 return 0;
418}
419
420void CHexControl::RecalcLayout() {
421 if (m_Buffer == nullptr) {

Callers

nothing calls this directly

Calls 1

GetSizeMethod · 0.45

Tested by

no test coverage detected