Files
Oogynize/Hooks/ButtonHook/ButtonStrategy.h

102 lines
4.0 KiB
C++

#pragma once
namespace Ooganizer
{
//////////////////////////////////////////////////////////////////////
// Itce: ButtonStrategy
// Desc: This interface allows us to abstract out specific implementations
// for different caption buttons with different Themes.
//
// Note: following functions will be called from the windows messages to
// be implemented directly here independently and draw only the button.
//
// Note2: Each Button Strategy is directly tied to a C
//////////////////////////////////////////////////////////////////////
class ButtonStrategy
{
public:
// generic draw function - called for all default messages
virtual void draw(HWND hWnd, const HDC &hdc, const RECT &rpos) const = 0;
// draw the button in an up state
virtual void drawButtonUp(HWND hWnd, const HDC &hDc, const RECT &rPos) const = 0;
// draw the button in a down state
virtual void drawButtonDown(HWND hWnd, const HDC &hDc, const RECT &rPos) const = 0;
// returns the RECT position of the the CaptionButton
virtual void CalcCaptionButtonRect(HWND hWnd, RECT& RectButtonPos) const = 0;
////
// returns the dimension / size of the caption / title bar (impl. in base)
////
void CalcCaptionRect(HWND hWnd, RECT& RectCaption, SIZE &heightNwidth) const;
ButtonStrategy(void);
virtual ~ButtonStrategy(void);
};
//////////////////////////////////////////////////////////////////////
// Clss: ClassicButtonStrategy
// Desc: Implementation for our Windows Classic Theme Strategy
//////////////////////////////////////////////////////////////////////
class ClassicButtonStrategy : public ButtonStrategy
{
public:
void draw(HWND hWnd, const HDC &hdc, const RECT &rpos) const;
void drawButtonUp(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void drawButtonDown(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void CalcCaptionButtonRect(HWND hWnd, RECT& RectButtonPos) const {};
ClassicButtonStrategy();
virtual ~ClassicButtonStrategy();
};
//////////////////////////////////////////////////////////////////////
// Clss: AeroButtonStrategy
// Desc: Implementation for our Windows Aero (Glass) Strategy
//////////////////////////////////////////////////////////////////////
class AeroButtonStrategy : public ButtonStrategy
{
public:
virtual void draw(HWND hWnd, const HDC &hdc, const RECT &rpos) const;
void drawButtonUp(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void drawButtonDown(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void CalcCaptionButtonRect(HWND hWnd, RECT& RectButtonPos) const;
AeroButtonStrategy();
virtual ~AeroButtonStrategy();
};
//////////////////////////////////////////////////////////////////////
// Clss: VistaNoAeroStrategy
// Desc: Implementation for Vista when Aero (Glass) is not running
//////////////////////////////////////////////////////////////////////
class VistaNoAeroStrategy : public ButtonStrategy
{
public:
virtual void draw(HWND hWnd, const HDC &hdc, const RECT &rpos) const;
void drawButtonUp(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void drawButtonDown(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void CalcCaptionButtonRect(HWND hWnd, RECT& RectButtonPos) const;
// Uses Hidden Window Strategy
VistaNoAeroStrategy();
virtual ~VistaNoAeroStrategy();
};
//////////////////////////////////////////////////////////////////////
// Clss: XPButtonStrategy
// Desc: Implementation for Windows XP Themed Strategy
//////////////////////////////////////////////////////////////////////
class XPButtonStrategy : public ButtonStrategy
{
public:
virtual void draw(HWND hWnd, const HDC &hdc, const RECT &rpos) const;
void drawButtonUp(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void drawButtonDown(HWND hWnd, const HDC &hDc, const RECT &rPos) const;
void CalcCaptionButtonRect(HWND hWnd, RECT& RectButtonPos) const{};
XPButtonStrategy();
virtual ~XPButtonStrategy();
};
}