// XTButton.h : interface for the CXTButton class. // // This file is a part of the XTREME CONTROLS MFC class library. // (c)1998-2012 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 // ///////////////////////////////////////////////////////////////////////////// //{{AFX_CODEJOCK_PRIVATE #if !defined(__XTBUTTON_H__) #define __XTBUTTON_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 // forwards class CXTThemeManager; class CXTButtonTheme; class CXTPImageManagerIcon; class CXTPImageManagerIconHandle; // --------------------------------------------------------------------- // Summary: // CXTButton is a CButton derived class. It is used to create // flat style and image buttons. This control has several features // including flat, semi-flat, and three dimensional borders. // --------------------------------------------------------------------- class _XTP_EXT_CLASS CXTButton : public CButton, public CXTThemeManagerStyleHostBase { DECLARE_DYNAMIC(CXTButton) DECLARE_THEME_HOST(CXTButton) DECLARE_THEME_REFRESH(CXTButton) public: // ---------------------------------------- // Summary: // Constructs a CXTButton object // Parameters: // pThemeFactoryClass - Factory runtime class associated with this class // ---------------------------------------- CXTButton(CRuntimeClass* pThemeFactoryClass = NULL); // ----------------------------------------------------------- // Summary: // Destroys a CXTButton object, handles cleanup and // deallocation // ----------------------------------------------------------- virtual ~CXTButton(); public: //----------------------------------------------------------------------- // Summary: // Sets the highlight state for the button control. // Parameters: // bChecked - Specifies whether the button is to be checked. TRUE // will check the button. FALSE will uncheck it. // Remarks: // This member function sets the highlighting state of a button // control. This is the same as its CButton counterpart, except // the m_bChecked flag is set. This is done because MFC does not // recognize the button as being checked unless it is a radio or // check box. //----------------------------------------------------------------------- void SetStateX(BOOL bChecked); // ------------------------------------------------------------------------ // Summary: // Sets the highlight state for the button control. // Parameters: // bChecked - Specifies whether the button is to be checked. TRUE will // check the button. FALSE will uncheck it. // Remarks: // This member function sets the highlighting state of the button // control. This is the same as its CButton counterpart, except the // m_bChecked flag is set. This is done because MFC does not recognize // the button as being checked unless it is a radio or check box. // ------------------------------------------------------------------------ void SetChecked(BOOL bChecked); //----------------------------------------------------------------------- // Summary: // This member function will set the gap between the button's edge // and the image. // Parameters: // nGap - Amount in pixels of the gap between the button edge and // the image. // Returns: // The previous border gap value. //----------------------------------------------------------------------- int SetBorderGap(int nGap); //----------------------------------------------------------------------- // Summary: // This member function will set the gap between the button's text // and the image. // Parameters: // nGap - Amount in pixels of the gap between the button text and // the image. // Returns: // The previous border gap value. //----------------------------------------------------------------------- int SetImageGap(int nGap); //----------------------------------------------------------------------- // Summary: // This member function will set the normal and hot state icons for // the push button. // Parameters: // size - CSize object that represents the size of the icon. // hIcon - Handle to the normal icon. // pIcon - Handle to the normal icon. // hIconHandle - Handle to the normal icon. // hIconHot - Handle to the hot icon. // hIconHotHandle - Handle to the hot icon. // nID - Resource ID for the normal icon. // nHotID - Resource ID for the pressed icon. // lpszID - Resource string ID for the normal icon. // lpszHotID - Resource string ID for the hot icon. // bRedraw - Specifies whether the button is to be redrawn. A // nonzero value redraws the button. A zero value does // not redraw the button. The button is redrawn by default. // Returns: // TRUE if successful, otherwise returns FALSE. //----------------------------------------------------------------------- virtual BOOL SetIcon(CSize size, HICON hIcon, HICON hIconHot = NULL, BOOL bRedraw = TRUE); virtual BOOL SetIcon(CSize size, UINT nID, UINT nHotID = 0, BOOL bRedraw = TRUE); // virtual BOOL SetIcon(CSize size, LPCTSTR lpszID, LPCTSTR lpszHotID = NULL, BOOL bRedraw = TRUE); // virtual BOOL SetIcon(CSize size, const CXTPImageManagerIconHandle& hIconHandle, const CXTPImageManagerIconHandle& hIconHotHandle, BOOL bRedraw = TRUE); // BOOL SetIcon(CSize size, CXTPImageManagerIcon* pIcon, BOOL bRedraw = TRUE);// //----------------------------------------------------------------------- // Summary: // This member function will set the bitmap associated with the // button. // Parameters: // size - CSize object that represents the size of the bitmap. // nID - Resource ID for the bitmap. // bRedraw - Specifies whether the button is to be redrawn. A nonzero // value redraws the button. A zero value does not redraw // the button. The button is redrawn by default. // Returns: // TRUE if successful, otherwise returns FALSE. //----------------------------------------------------------------------- virtual BOOL SetBitmap(CSize size, UINT nID, BOOL bRedraw = TRUE); //----------------------------------------------------------------------- // Summary: // This member function will set the XY location of the text and image // that is displayed on the push button. // Parameters: // ptImage - XY location of the image displayed on the button. // ptText - XY location of the text displayed on the button. // bRedraw - Specifies whether the button is to be redrawn. A nonzero // value redraws the button. A zero value does not redraw // the button. The button is redrawn by default. // Returns: // TRUE if successful, otherwise returns FALSE. //----------------------------------------------------------------------- virtual BOOL SetTextAndImagePos(CPoint ptImage, CPoint ptText, BOOL bRedraw = TRUE); // ---------------------------------------------------------------------------- // Summary: // This member function will set the display style for the button. // Parameters: // dwxStyle - Specifies the button style. The button style can be defined // as one or more of the styles listed in the Remarks section. // bRedraw - Specifies whether the button is to be redrawn. A nonzero value // redraws the button. A zero value does not redraw the button. // The button is redrawn by default. // Remarks: // The CXTButton can be set to use one or more of the following // styles: // * BS_XT_FLAT Draws the button flat without any borders. // * BS_XT_SEMIFLAT Draws the button with a thin 3D // border. // * BS_XT_TWOROWS Draws images and text that are // centered. // * BS_XT_SHOWFOCUS Draws a focus rect when the button // has input focus. // * BS_XT_HILITEPRESSED Highlights the button when // pressed. // * BS_XT_XPFLAT Draws a flat button using Office XP // themes. // * BS_XT_FLAT_ANY Same as (BS_XT_FLAT | BS_XT_SEMIFLAT) // * BS_XT_WINXP_COMPAT Uses Windows XP themes if // available. This setting overrides BS_XT_FLAT and BS_XT_SEMIFLAT, // but does not override BS_XT_XPFLAT. // Returns: // The previous style that was set. // See Also: // GetXButtonStyle // ---------------------------------------------------------------------------- virtual DWORD SetXButtonStyle(DWORD dwxStyle, BOOL bRedraw = TRUE); //----------------------------------------------------------------------- // Summary: // This function returns only the BS_XT_ style values, not any of the // other window styles. // Returns: // The button styles for this CXTButton object. //----------------------------------------------------------------------- virtual DWORD GetXButtonStyle(); //----------------------------------------------------------------------- // Summary: // Call this member function to determine the gap between the // button image and the button's edge. // Returns: // The amount in pixels between the button image and border. //----------------------------------------------------------------------- int GetBorderGap() const; //----------------------------------------------------------------------- // Summary: // Call this member function to determine the gap between the // button text and the image. // Returns: // The amount in pixels between the button text and image displayed. //----------------------------------------------------------------------- int GetImageGap() const; //----------------------------------------------------------------------- // Summary: // Call this member function to determine if the button should // display highlights on mouse over. // Returns: // TRUE if the button display highlights on mouse over, otherwise // returns FALSE. //----------------------------------------------------------------------- BOOL GetHilite() const; //----------------------------------------------------------------------- // Summary: // Call this member function to determine if the user has defined // specific locations for text and image display. // Returns: // TRUE if the user has defined text and image display location. //----------------------------------------------------------------------- BOOL GetUserPosition() const; //----------------------------------------------------------------------- // Summary: // Call this member function to determine if the checked state has // been defined for the button control. // Returns: // TRUE if the checked state is defined for the button control, // otherwise returns FALSE. //----------------------------------------------------------------------- BOOL GetChecked() const; //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the normal icon image // used by the button control. // Returns: // A handle to a HICON object. //----------------------------------------------------------------------- HICON GetNormalIcon(); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the selected icon image // used by the button control. // Returns: // A handle to a HICON object. //----------------------------------------------------------------------- HICON GetSelectedIcon(); //----------------------------------------------------------------------- // Summary: // Call this member function to retrieve the disabled bitmap // used by the button control. // Returns: // A handle to a HBITMAP object. //----------------------------------------------------------------------- HBITMAP GetDisabledBitmap() const; //----------------------------------------------------------------------- // Summary: // Call this member function to return the size of the image // displayed for the button control. // Returns: // A CSize object. //----------------------------------------------------------------------- CSize GetImageSize() const; //----------------------------------------------------------------------- // Summary: // Call this member function to return the x-y location of the // top left corner where the button image is displayed. // Returns: // A CPoint object. //----------------------------------------------------------------------- CPoint GetImagePoint() const; //----------------------------------------------------------------------- // Summary: // Call this member function to return the x-y location of the // top left corner where text is displayed. // Returns: // A CPoint object. //----------------------------------------------------------------------- CPoint GetTextPoint() const; //-------------------------------------------------------------------- // Summary: // This member function is called to check if the button control // is using a theme. // Returns: // TRUE if a theme is used, otherwise FALSE. //-------------------------------------------------------------------- virtual BOOL IsThemeValid() const; //----------------------------------------------------------------------- // Summary: // Call this member function to return a pointer to the image // manager for the button control. // Returns: // A pointer to a CXTPImageManagerIcon object. //----------------------------------------------------------------------- CXTPImageManagerIcon* GetIcon() const; //----------------------------------------------------------------------- // Summary: // This method will allow the user to define the default colors for the // background shadow and highlight colors for the button. // Parameters: // clr3DFace - An RGB value that represents the user defined // face color for three dimensional display elements. // clr3DHilight - An RGB value that represents the user defined // highlight color for three dimensional display // elements (edges facing the light source.) // clr3DShadow - An RGB value that represents the user defined // shadow color for three dimensional display // elements (edges facing away from the light source). // clrBtnText - An RGB value that represents the user defined // text color on push buttons. //----------------------------------------------------------------------- virtual void SetAlternateColors(COLORREF clr3DFace, COLORREF clr3DHilight, COLORREF clr3DShadow, COLORREF clrBtnText); //----------------------------------------------------------------------- // Summary: // This member function sets the default face color for the button. // Parameters: // clrFace - An RGB value that represents the user defined face color. //----------------------------------------------------------------------- virtual void SetColorFace(COLORREF clrFace); //----------------------------------------------------------------------- // Summary: // This member function gets the current face color. // Returns: // An RGB value that represents the current face color. //----------------------------------------------------------------------- virtual COLORREF GetColorFace(); //----------------------------------------------------------------------- // Summary: // This member function sets the default highlight color for the button. // Parameters: // clrHilite - An RGB value that represents the user defined highlight color. //----------------------------------------------------------------------- virtual void SetColorHilite(COLORREF clrHilite); //----------------------------------------------------------------------- // Summary: // This member function sets the default shadow color for the button. // Parameters: // clrShadow - An RGB value that represents the user defined shadow color. //----------------------------------------------------------------------- virtual void SetColorShadow(COLORREF clrShadow); //----------------------------------------------------------------------- // Summary: // This member function sets the default text color for the button. // Parameters: // clrText - An RGB value that represents the user defined text color. //----------------------------------------------------------------------- virtual void SetColorText(COLORREF clrText); //----------------------------------------------------------------------- // Summary: // This member function sets the colors for the BS_XT_XPFLAT mode. // Parameters: // clrBorder - An RGB value that represents the user defined // border color for the flat button. // clrHighlight - An RGB value that represents the user defined // highlight color for the flat button. // clrPressed - An RGB value that represents the user defined // color for when the flat button is pressed. //----------------------------------------------------------------------- virtual void SetXPFlatColors(COLORREF clrBorder, COLORREF clrHighlight, COLORREF clrPressed); //----------------------------------------------------------------------- // Summary: // This function toggles the image display for the button on or off. //----------------------------------------------------------------------- virtual void ResetImage(); //----------------------------------------------------------------------- // Summary: // Call this member function to set the font for the button control. // Parameters: // pFont - Points to a valid CFont object. // Returns: // A pointer to the previously set font for the button control. //----------------------------------------------------------------------- virtual CFont* SetFontEx(CFont* pFont); //----------------------------------------------------------------------- // Summary: // Returns the button styles for this object. This function returns only the BS_ style values, not any of the other window styles. // Returns: Returns BS_ style for this button. //----------------------------------------------------------------------- BYTE GetButtonStyle() const; protected: //----------------------------------------------------------------------- // Summary: // This member function is called by the CXTButton class to // perform initialization when the window is created or sub-classed. // Returns: // TRUE if the window was successfully initialized, otherwise FALSE. //----------------------------------------------------------------------- virtual bool Init(); //----------------------------------------------------------------------- // Summary: // This member function is called to free all associated GDI resources // that have been allocated. //----------------------------------------------------------------------- virtual void CleanUpGDI(); //----------------------------------------------------------------------- // Summary: // Call this member function to return the button's text minus the '&'. // Parameters: // bRemoveAmpersand - TRUE to remove the '&' used for mnemonics. // Returns: // A CString object that represents the button's text. //----------------------------------------------------------------------- virtual CString GetButtonText(BOOL bRemoveAmpersand); protected: //{{AFX_CODEJOCK_PRIVATE DECLARE_MESSAGE_MAP() //{{AFX_VIRTUAL(CXTButton) virtual void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct); virtual void PreSubclassWindow(); virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX_VIRTUAL virtual void OnDraw(CDC* pDC); //{{AFX_MSG(CXTButton) afx_msg UINT OnGetDlgCode(); afx_msg LRESULT OnSetStyle(WPARAM wParam, LPARAM lParam); afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg void OnMouseMove(UINT nFlags, CPoint point); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnSetFocus(CWnd* pOldWnd); afx_msg void OnKillFocus(CWnd* pNewWnd); afx_msg void OnPaint(); afx_msg LRESULT OnSetState(WPARAM wParam, LPARAM lParam); afx_msg void OnMouseLeave(); afx_msg void OnInvalidate(); afx_msg LRESULT OnDefaultAndInvalidate(WPARAM, LPARAM); afx_msg LRESULT OnUpdateUIState(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnSetText(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnPrintClient(WPARAM wParam, LPARAM lParam); //}}AFX_MSG //}}AFX_CODEJOCK_PRIVATE protected: int m_nBorderGap; // Gap between the button edge and the image. int m_nImageGap; // Gap between the button text and the image. bool m_bPreSubclassInit; // true when initializing from PreSubclassWindow. BOOL m_bUserPosition; // TRUE if the user has defined the XY coordinates for the image and text. BOOL m_bChecked; // TRUE if the button is checked. DWORD m_dwxStyle; // The style of the button, see SetXButtonStyle. CSize m_sizeImage; // Initial size of the button. CPoint m_ptImage; // XY location of the button image. CPoint m_ptText; // XY location of the button text. CXTPImageManagerIcon* m_pIcon; // Multiple state icon manager converts icon to different states. protected: BOOL m_bHot; // TRUE if mouse under button BOOL m_bPushed; // TRUE if button was pressed BOOL m_bOwnerDraw; // TRUE if button has BS_OWNERDRAW style }; ////////////////////////////////////////////////////////////////////// AFX_INLINE int CXTButton::SetImageGap(int nGap) { int nOldGap = m_nImageGap; m_nImageGap = nGap; return nOldGap; } AFX_INLINE int CXTButton::SetBorderGap(int nGap) { int nOldGap = m_nBorderGap; m_nBorderGap = nGap; return nOldGap; } AFX_INLINE DWORD CXTButton::GetXButtonStyle() { ASSERT(::IsWindow(m_hWnd)); return m_dwxStyle; } AFX_INLINE void CXTButton::SetStateX(BOOL bChecked) { m_bChecked = bChecked; if (GetSafeHwnd()) Invalidate(FALSE); } AFX_INLINE void CXTButton::SetChecked(BOOL bChecked) { m_bChecked = bChecked; if (GetSafeHwnd()) Invalidate(FALSE); } AFX_INLINE int CXTButton::GetBorderGap() const { return m_nBorderGap; } AFX_INLINE int CXTButton::GetImageGap() const { return m_nImageGap; } AFX_INLINE BOOL CXTButton::GetHilite() const { return m_bHot || (::GetCapture() == m_hWnd); } AFX_INLINE BOOL CXTButton::GetUserPosition() const { return m_bUserPosition; } AFX_INLINE BOOL CXTButton::GetChecked() const { return m_bChecked; } #ifndef ODS_NOACCEL #define ODS_NOACCEL 0x0100 #endif #ifndef ODS_NOFOCUSRECT #define ODS_NOFOCUSRECT 0x0200 #endif const DWORD BS_XT_FLAT = 0x0001; // const DWORD BS_XT_SEMIFLAT = 0x0002; // const DWORD BS_XT_FLAT_ANY = 0x0003; // const DWORD BS_XT_TWOROWS = 0x0004; // const DWORD BS_XT_SHOWFOCUS = 0x0010; // const DWORD BS_XT_HILITEPRESSED = 0x0020; // const DWORD BS_XT_XPFLAT = 0x0040; // const DWORD BS_XT_WINXP_COMPAT = 0x1000; // #endif // #if !defined(__XTBUTTON_H__)