DragonNest/Third/XTToolkitPro/Source/Markup/XTPMarkupButton.h
2024-12-19 09:48:26 +08:00

169 lines
4.8 KiB
C++

// XTPMarkupButton.h: interface for the CXTPMarkupButton class.
//
// This file is a part of the XTREME TOOLKIT PRO MFC class library.
// (c)1998-2008 Codejock Software, All Rights Reserved.
//
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
// CONSENT OF CODEJOCK SOFTWARE.
//
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
// SINGLE COMPUTER.
//
// CONTACT INFORMATION:
// support@codejock.com
// http://www.codejock.com
//
/////////////////////////////////////////////////////////////////////////////
#if !defined(__XTPMARKUPBUTTON_H__)
#define __XTPMARKUPBUTTON_H__
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "XTPMarkupControl.h"
#include "Common/XTPWinThemeWrapper.h"
class CXTPMarkupBrush;
class CXTPMarkupBuilder;
class _XTP_EXT_CLASS CXTPMarkupButtonBase : public CXTPMarkupContentControl
{
DECLARE_MARKUPCLASS(CXTPMarkupButtonBase);
protected:
CXTPMarkupButtonBase();
protected:
void OnMouseLeave(CXTPMarkupMouseEventArgs* e);
void OnMouseEnter(CXTPMarkupMouseEventArgs* e);
void OnMouseLeftButtonUp(CXTPMarkupMouseButtonEventArgs* e);
void OnMouseLeftButtonDown(CXTPMarkupMouseButtonEventArgs* e);
void OnLostMouseCapture(CXTPMarkupMouseEventArgs* e);
public:
BOOL IsPressed() const;
protected:
void SetPressed(BOOL bPressed);
protected:
virtual void OnClick();
protected:
BOOL m_bPushed;
BOOL m_bMouseOver;
CXTPWinThemeWrapper m_themeButton;
public:
static CXTPMarkupDependencyProperty* m_pIsPressedProperty;
static CXTPMarkupRoutedEvent* m_pClickEvent;
};
class _XTP_EXT_CLASS CXTPMarkupButton : public CXTPMarkupButtonBase
{
DECLARE_MARKUPCLASS(CXTPMarkupButton);
protected:
CXTPMarkupButton();
virtual ~CXTPMarkupButton();
protected:
void OnRender(CXTPMarkupDrawingContext* pDC);
void OnRenderFocusVisual(CXTPMarkupDrawingContext* drawingContext);
CSize ArrangeOverride(CSize szFinalSize);
CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
public:
};
class _XTP_EXT_CLASS CXTPMarkupToggleButton : public CXTPMarkupButtonBase
{
DECLARE_MARKUPCLASS(CXTPMarkupToggleButton);
public:
void SetChecked(BOOL bChecked);
BOOL GetChecked() const;
BOOL IsThreeState() const;
protected:
virtual void OnClick();
virtual void OnToggle();
virtual void OnChecked(CXTPMarkupRoutedEventArgs* e);
virtual void OnUnchecked(CXTPMarkupRoutedEventArgs* e);
virtual void OnIndeterminate(CXTPMarkupRoutedEventArgs* e);
protected:
static void AFX_CDECL OnIsCheckedChanged(CXTPMarkupObject* d, CXTPMarkupPropertyChangedEventArgs* e);
static CXTPMarkupObject* AFX_CDECL ConvertIsChecked(CXTPMarkupContext* pContext, CXTPMarkupObject* pObject);
public:
static CXTPMarkupDependencyProperty* m_pIsThreeStateProperty;
static CXTPMarkupDependencyProperty* m_pIsCheckedProperty;
static CXTPMarkupRoutedEvent* m_pCheckedEvent;
static CXTPMarkupRoutedEvent* m_pUncheckedEvent;
static CXTPMarkupRoutedEvent* m_pIndeterminateEvent;
};
class _XTP_EXT_CLASS CXTPMarkupCheckBox : CXTPMarkupToggleButton
{
DECLARE_MARKUPCLASS(CXTPMarkupCheckBox);
protected:
CXTPMarkupCheckBox();
~CXTPMarkupCheckBox();
void OnRender(CXTPMarkupDrawingContext* pDC);
void OnRenderFocusVisual(CXTPMarkupDrawingContext* drawingContext);
CSize ArrangeOverride(CSize szFinalSize);
CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
};
class _XTP_EXT_CLASS CXTPMarkupRadioButton : CXTPMarkupToggleButton
{
DECLARE_MARKUPCLASS(CXTPMarkupRadioButton);
protected:
CXTPMarkupRadioButton();
~CXTPMarkupRadioButton();
protected:
void OnRender(CXTPMarkupDrawingContext* pDC);
void OnRenderFocusVisual(CXTPMarkupDrawingContext* drawingContext);
CSize ArrangeOverride(CSize szFinalSize);
CSize MeasureOverride(CXTPMarkupDrawingContext* pDC, CSize szAvailableSize);
protected:
void OnToggle();
void OnChecked(CXTPMarkupRoutedEventArgs* e);
private:
void UpdateRadioButtonGroup();
};
AFX_INLINE void CXTPMarkupToggleButton::SetChecked(BOOL bChecked) {
SetValue(m_pIsCheckedProperty, CXTPMarkupEnum::CreateValue(bChecked));
}
AFX_INLINE BOOL CXTPMarkupToggleButton::GetChecked() const {
CXTPMarkupEnum* pValue = MARKUP_STATICCAST(CXTPMarkupEnum, GetValue(m_pIsCheckedProperty));
return pValue != NULL ? (BOOL)(int)*pValue : FALSE;
}
AFX_INLINE BOOL CXTPMarkupToggleButton::IsThreeState() const {
CXTPMarkupBool* pValue = MARKUP_STATICCAST(CXTPMarkupBool, GetValue(m_pIsThreeStateProperty));
return pValue != NULL ? (BOOL)*pValue : FALSE;
}
AFX_INLINE BOOL CXTPMarkupButtonBase::IsPressed() const {
CXTPMarkupBool* pValue = MARKUP_STATICCAST(CXTPMarkupBool, GetValue(m_pIsPressedProperty));
return pValue ? (BOOL)*pValue : FALSE;
}
#endif // !defined(__XTPMARKUPBUTTON_H__)