221 lines
6.4 KiB
C++
221 lines
6.4 KiB
C++
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Copyright (C) 2005 Microsoft Corporation. All rights reserved.
|
|
//
|
|
// ScrollBarWindow.h
|
|
//
|
|
// CScrollBarWindow declaration.
|
|
//
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
#pragma once
|
|
|
|
#include "BaseWindow.h"
|
|
#include "ButtonWindow.h"
|
|
|
|
class CScrollButtonWindow;
|
|
|
|
enum SCROLLBAR_DIRECTION
|
|
{
|
|
SCROLL_NONE_DIR,
|
|
SCROLL_PAGEDOWN, // or page left
|
|
SCROLL_PAGEUP // or page right
|
|
};
|
|
|
|
enum SHELL_MODE
|
|
{
|
|
STOREAPP,
|
|
DESKTOP,
|
|
};
|
|
|
|
struct CScrollInfo
|
|
{
|
|
CScrollInfo()
|
|
{
|
|
nMax = 0;
|
|
nPage = 0;
|
|
nPos = 0;
|
|
}
|
|
|
|
int nMax;
|
|
int nPage;
|
|
int nPos;
|
|
};
|
|
|
|
class CScrollBarWindow;
|
|
|
|
class CScrollBarWindowFactory
|
|
{
|
|
public:
|
|
static CScrollBarWindowFactory* Instance();
|
|
CScrollBarWindow* MakeScrollBarWindow(SHELL_MODE shellMode);
|
|
void Release();
|
|
|
|
protected:
|
|
CScrollBarWindowFactory();
|
|
|
|
private:
|
|
static CScrollBarWindowFactory* _instance;
|
|
|
|
};
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CScrollBarWindow declaration.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
class CScrollBarWindow : public CBaseWindow
|
|
{
|
|
public:
|
|
CScrollBarWindow();
|
|
virtual ~CScrollBarWindow();
|
|
|
|
BOOL _Create(ATOM atom, DWORD dwExStyle, DWORD dwStyle, CBaseWindow *pParent = nullptr, int wndWidth = 0, int wndHeight = 0);
|
|
|
|
void _Resize(int x, int y, int cx, int cy);
|
|
void _Show(BOOL isShowWnd);
|
|
void _Enable(BOOL isEnable);
|
|
|
|
LRESULT CALLBACK _WindowProcCallback(_In_ HWND wndHandle, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam);
|
|
virtual void _OnPaint(_In_ HDC dcHandle, _In_ PAINTSTRUCT *pps);
|
|
virtual void _OnLButtonDown(POINT pt);
|
|
virtual void _OnLButtonUp(POINT pt);
|
|
virtual void _OnMouseMove(POINT pt);
|
|
virtual void _OnTimer() { };
|
|
|
|
virtual void _OnOwnerWndMoved(BOOL isResized);
|
|
|
|
virtual void _SetScrollInfo(_In_ CScrollInfo *lpsi);
|
|
virtual void _GetScrollInfo(_Out_ CScrollInfo *lpsi);
|
|
|
|
virtual BOOL _GetBtnUpRect(_Out_ RECT *prc);
|
|
virtual BOOL _GetBtnDnRect(_Out_ RECT *prc);
|
|
|
|
virtual void _ShiftLine(int nLine, BOOL isNotify)
|
|
{
|
|
DWORD dwSB = 0;
|
|
|
|
dwSB = (nLine > 0 ? SB_LINEDOWN :
|
|
nLine < 0 ? SB_LINEUP : 0);
|
|
|
|
_SetCurPos(_scrollInfo.nPos + nLine, isNotify ? dwSB : -1);
|
|
}
|
|
|
|
virtual void _ShiftPage(int nPage, BOOL isNotify)
|
|
{
|
|
DWORD dwSB = 0;
|
|
|
|
dwSB = (nPage > 0 ? SB_PAGEDOWN :
|
|
nPage < 0 ? SB_PAGEUP : 0);
|
|
|
|
_SetCurPos(_scrollInfo.nPos + _scrollInfo.nPage * nPage, isNotify ? dwSB : -1);
|
|
}
|
|
|
|
virtual void _ShiftPosition(int iPos, BOOL isNotify)
|
|
{
|
|
_SetCurPos(iPos, isNotify ? SB_THUMBPOSITION : -1);
|
|
}
|
|
|
|
virtual void _GetScrollArea(_Out_ RECT *prc);
|
|
virtual void _SetCurPos(int nPos, int dwSB);
|
|
|
|
private:
|
|
void _AdjustWindowPos();
|
|
|
|
CScrollButtonWindow* _pBtnUp;
|
|
CScrollButtonWindow* _pBtnDn;
|
|
|
|
CScrollInfo _scrollInfo;
|
|
SIZE _sizeOfScrollBtn;
|
|
SCROLLBAR_DIRECTION _scrollDir;
|
|
};
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CScrollBarNullWindow declaration.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
class CScrollBarNullWindow : public CScrollBarWindow
|
|
{
|
|
public:
|
|
CScrollBarNullWindow() { };
|
|
virtual ~CScrollBarNullWindow() { };
|
|
|
|
virtual BOOL _Create(ATOM atom, DWORD dwExStyle, DWORD dwStyle, _In_opt_ CBaseWindow *pParent = nullptr, int wndWidth = 0, int wndHeight = 0)
|
|
{
|
|
atom; dwExStyle; dwStyle; pParent; wndWidth; wndHeight;
|
|
return TRUE;
|
|
};
|
|
|
|
virtual void _Destroy() { };
|
|
|
|
virtual void _Move(int x, int y) { x;y; };
|
|
virtual void _Resize(int x, int y, int cx, int cy) { x; y; cx; cy; };
|
|
virtual void _Show(BOOL isShowWnd) { isShowWnd; };
|
|
virtual BOOL _IsWindowVisible() { return TRUE; };
|
|
virtual void _Enable(BOOL isEnable) { isEnable; };
|
|
virtual BOOL _IsEnabled() { return TRUE; };
|
|
virtual void _InvalidateRect() { };
|
|
virtual BOOL _GetWindowRect(_Out_ LPRECT lpRect) { lpRect->bottom = 0; lpRect->left = 0; lpRect->right = 0; lpRect->top = 0; return TRUE; };
|
|
virtual BOOL _GetClientRect(_Out_ LPRECT lpRect) { lpRect->bottom = 0; lpRect->left = 0; lpRect->right = 0; lpRect->top = 0; return TRUE; };
|
|
|
|
virtual LRESULT CALLBACK _WindowProcCallback(_In_ HWND wndHandle, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
|
|
{
|
|
wndHandle; uMsg; wParam; lParam;
|
|
return 0;
|
|
};
|
|
virtual void _OnPaint(_In_ HDC dcHandle, _In_ PAINTSTRUCT *pps) { dcHandle;pps; };
|
|
virtual void _OnLButtonDown(POINT pt) { pt; };
|
|
virtual void _OnLButtonUp(POINT pt) { pt; };
|
|
virtual void _OnMouseMove(POINT pt) { pt; };
|
|
virtual void _OnTimer() { };
|
|
|
|
virtual void _OnOwnerWndMoved(BOOL isResized) { isResized; };
|
|
|
|
virtual void _SetScrollInfo(_In_ CScrollInfo *lpsi) { lpsi; };
|
|
virtual void _GetScrollInfo(_In_ CScrollInfo *lpsi) { lpsi; };
|
|
|
|
virtual BOOL _GetBtnUpRect(_Out_ RECT *prc) { prc->bottom = 0; prc->left = 0; prc->right = 0; prc->top = 0; return TRUE; };
|
|
virtual BOOL _GetBtnDnRect(_Out_ RECT *prc) { prc->bottom = 0; prc->left = 0; prc->right = 0; prc->top = 0; return TRUE; };
|
|
|
|
virtual void _ShiftLine(int nLine, BOOL isNotify) { nLine; isNotify; };
|
|
virtual void _ShiftPage(int nPage, BOOL isNotify) { nPage; isNotify; };
|
|
virtual void _ShiftPosition(int iPos, BOOL isNotify) { iPos; isNotify; };
|
|
virtual void _GetScrollArea(_Out_ RECT *prc) { prc->bottom = 0; prc->left = 0; prc->right = 0; prc->top = 0; };
|
|
virtual void _SetCurPos(int nPos, DWORD dwSB) { nPos; dwSB; };
|
|
};
|
|
|
|
//////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CScrollButtonWondow declaration.
|
|
//
|
|
//////////////////////////////////////////////////////////////////////
|
|
|
|
class CScrollButtonWindow : public CButtonWindow
|
|
{
|
|
public:
|
|
CScrollButtonWindow(UINT uSubType)
|
|
{
|
|
subTypeOfControl = uSubType;
|
|
}
|
|
virtual ~CScrollButtonWindow()
|
|
{
|
|
}
|
|
|
|
LRESULT CALLBACK _WindowProcCallback(_In_ HWND wndHandle, UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
|
|
{
|
|
wndHandle;uMsg;wParam;lParam;
|
|
return 0;
|
|
}
|
|
virtual void _OnPaint(_In_ HDC dcHandle, _In_ PAINTSTRUCT *pps);
|
|
virtual void _OnLButtonDown(POINT pt);
|
|
virtual void _OnLButtonUp(POINT pt);
|
|
virtual void _OnTimer();
|
|
|
|
private:
|
|
UINT subTypeOfControl; // DFCS_SCROLLxxx for DrawFrameControl
|
|
};
|