1
0
mirror of https://github.com/azure-rtos/guix.git synced 2025-01-28 07:03:11 +08:00
guix/guix_studio/ScrollHelper.h

62 lines
1.9 KiB
C++

#ifndef SCROLL_HELPER_INCLUDED
#define SCROLL_HELPER_INCLUDED
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class CScrollHelper
{
public:
CScrollHelper();
~CScrollHelper();
// Attach/detach a CWnd or CDialog.
void AttachWnd(CWnd* pWnd);
void DetachWnd();
// Set/get the virtual display size. When the dialog or window
// size is smaller than the display size, then that is when
// scrollbars will appear. Set either the display width or display
// height to zero if you don't want to enable the scrollbar in the
// corresponding direction.
void SetDisplaySize(int displayWidth, int displayHeight);
const CSize& GetDisplaySize() const;
// Get current scroll position. This is needed if you are scrolling
// a custom CWnd which implements its own drawing in OnPaint().
const CSize& GetScrollPos() const;
// Get current page size. Useful for debugging purposes.
const CSize& GetPageSize() const;
void SetScrollPos(int bar, int newpos, BOOL redraw = TRUE);
// Scroll back to top, left, or top-left corner of the window.
void ScrollToOrigin(bool scrollLeft, bool scrollTop);
// Message handling.
void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
void OnSize(UINT nType, int cx, int cy);
BOOL Scroll(int bar, int delta);
private:
int Get32BitScrollPos(int bar, CScrollBar* pScrollBar);
void UpdateScrollInfo();
void UpdateScrollBar(int bar, int windowSize, int displaySize,
LONG& pageSize, LONG& scrollPos, LONG& deltaPos);
void GetClientRectSB(CWnd* pWnd, CRect& rect);
CWnd* m_attachWnd;
CSize m_pageSize;
CSize m_displaySize;
CSize m_scrollPos;
};
#endif // SCROLL_HELPER_INCLUDED
// END