⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 coolcontrolsmanager.h

📁 一个通过远程给制定的数据库进行远程备份的源代码~~
💻 H
字号:
/////////////////////////////////////////////////////////////////////////
// 类名:CCoolControlsManager
// 功能:对话框控件自动添加平面效果
// 附注:增强美观效果
// 修订:徐景周(jingzhou_xu@163.com)
// 组织:Future Studio
// 日期:2005.5.23
////////////////////////////////////////////////////////////////////////
#if !defined (__CoolControlsManager_h)
#define __CoolControlsManager_h

#include <afxtempl.h>   // For CMapPtrToPtr

//////////////////////////////////////////////////////////////////////
// CCoolControlsManager class
class CCoolControlsManager {
   public:

      enum ButtonStatesEnum {
         bsNormal,
         bsHover,
         bsChecked,
      };

      enum DrawStatesEnum {
         dsNormal, 
         dsHover,
         dsAlternate,
         dsFocus = 0x04,
         dsHoverMask = 0x05,
         dsDisabled = 0x08,
      };

      // Base class for all controls and dialogs
      class CCMCore {
         public:            
            void Subclass( HWND hWnd, WNDPROC wndNewProc );
            void Unsubclass();

            // New window procedure (must be implemented by derived classes)
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam ) = 0;
         
         protected:
            HWND m_hWnd;                          // Handle of the window            
            WNDPROC m_oldWndProc;                 // Address of original window procedure
      };

      // Class that holds important control informations and is
      // responsible for drawing the control
      class CCMControl : public CCMCore {

         // Construction/destruction
         public:            
            CCMControl();
         
         // Operations
         public:
            // Main drawing routine            
            void DrawBorder();   
            // Returns TRUE if control needs repainting 
            virtual BOOL NeedRedraw( const POINT& point );

            // Give acces to the control state
            void SetState( int nFlagRemove, int nFlagAdd, BOOL bRedraw = TRUE );
            int GetState() const;

            // New window procedure
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
            
            static HWND m_hWndOld;           // Previously 'hovered' or 'focused' window

         // Implementation
         protected:            
            // Paint the scrollbars if a window contains at least one
            void DrawScrollBars( HDC hDC, const RECT& rc );
            // Paint the scrollbar control or an embedded window scrollbar (horiz or vert)
            void DrawScrollBar( HDC hDC, const RECT& rc,
                                int nType, BOOL bScrollbarCtrl = FALSE );
            // Draw the scrollbar thumb
            void DrawScrollbarThumb( HDC hDC, const RECT& rc );

            // There are helper functions for drawing 3D frames
            static void Draw3dBorder( HDC hDC, const RECT& rc, 
                                      int nColor1, int nColor2,
                                      int nColor3, int nColor4 );                               
            static void Draw3dBorder( HDC hDC, const RECT& rc, 
                                      int nColor1, int nColor2,
                                      int nColor3, int nColor4,
                                      int nColor5, int nColor6 );
            static void FillSolidRect( HDC hDC, const RECT& rect, COLORREF clr );
            static void FillSolidRect( HDC hDC, int x, int y, int cx, int cy, COLORREF clr );
            static void Draw3dRect( HDC hDC, int x, int y, int cx, int cy,
                                    COLORREF clrTopLeft, COLORREF clrBottomRight );
            static void Draw3dRect( HDC hDC, const RECT& rect,
                                    COLORREF clrTopLeft, COLORREF clrBottomRight );

         // Overrides
         protected:                                                            
            // Prepares DC and RECT for further drawings
            virtual void PrepareDraw( HDC& hDC, RECT& rc );    

            // Drawing code which is specific to the control
            virtual void DrawControl( HDC hDC, const RECT& rc );            

            // Returns TRUE if control (or one of its children) has a focus
            virtual BOOL IsFocused();
            
            short m_nState;                       // Current control state
            short m_nOldState;                    // Previous control state
      };

      // Edit windows
      class CCMEdit : public CCMControl {         
         public:
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
      };

      // ComboBoxes (all styles are suported)
      class CCMComboBox : public CCMControl {
         public:         
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
            virtual BOOL IsFocused();
      };

      // Date/Time pickers
      class CCMDateTime : public CCMComboBox {
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
      };

      // Pushbuttons
      class CCMPushButton : public CCMControl {
         public:
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
      };

      // Checkboxes
      class CCMCheckBox : public CCMPushButton {
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );

            // Check boxes and radio buttons are always drawn
            // in the same way regardless of focus   
            virtual BOOL IsFocused() { return FALSE; }
      };

      // Radiobuttons
      class CCMRadioButton : public CCMPushButton {
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
            void DrawFrame( POINT* ptArr, int nColor, 
                            HDC hDC, int xOff, int yOff );
            virtual BOOL IsFocused() { return FALSE; }
      };

      // Spin Buttons
      class CCMUpDown : public CCMControl {
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
            void DrawButton( HDC hDC, const RECT& rc );
      };

      // Edit control in simple combobox
      class CCMEditCombo : public CCMEdit {            
         protected:
            virtual void PrepareDraw( HDC& hDC, RECT& rc );
      };

      // Stand-alone scrollbar controls
      class CCMScrollBar : public CCMControl {
         public:
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
      };

      // Header control
      class CCMHeaderCtrl : public CCMControl {
         public:
            virtual BOOL NeedRedraw( const POINT& point );
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
            void DrawButton( HDC hDC, const RECT& rc, int nState );
         private:
            int m_nOldItem;        // Recently selected item
      };

      // Slider control
      class CCMTrackbar : public CCMControl {
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
            void DrawThumb( HDC hDC, const RECT& rc );
      };

      // Toolbars
      class CCMToolbar : public CCMControl {
         public:            
            virtual BOOL NeedRedraw( const POINT& point );                     
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
            void DrawButton( HDC hDC, const RECT& rc, int nState );            
         private:
            int m_nOldItem;        // Recently selected item
      };

      // IP Address control
      class CCMIPAddress : public CCMControl {
         public:
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
         protected:            
            virtual BOOL IsFocused();
      };

       // Tab control
      class CCMTabControl : public CCMControl {
         public:
            enum OrientationsEnum {
               tabTop,
               tabLeft,
               tabRight,
               tabBottom,
            };

            CCMTabControl() 
            {
               m_nOldItem = -1;
            }
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
            virtual BOOL NeedRedraw( const POINT& point );
         protected:
            virtual void DrawControl( HDC hDC, const RECT& rc );
            void DrawTab( HDC hDC, const RECT& rc, int nItem, int nState );            
            virtual BOOL IsFocused() { return FALSE; }
            OrientationsEnum GetOrientation() const;
         private:
            int m_nOldItem;         // Recently selected item
      };

      // Dialog (parent of controls)
      class CCMDialog : public CCMCore {
         public:
            virtual LRESULT WindowProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
      };
      
   public:
      CCoolControlsManager();
      virtual ~CCoolControlsManager();
      
      void Install( HWND hWnd );            // Installs control manager for given window only
      void Uninstall( HWND hWnd );          // Removes all window controls from the map
      
      // Installs WH_CALLWNDPROC hook, which automatically 
      // handles all dialogs in the givent thread. If dwThreadID = -1, then
      // current thread is used
      void InstallHook( DWORD dwThreadID = -1, BOOL bDialogOnly = TRUE );
                                                         
      // Installs WH_CALLWNDPROC hook for 
      // all dialogs in system (valid only for a DLL)
      void InstallGlobalHook( HINSTANCE hInstance, BOOL bDialogOnly = TRUE );

      // Uninstals hook
      void UninstallHook( DWORD dwThreadID = -1 );                 
      
      // Adds single control to the map
      BOOL AddControl( HWND hWnd, LPCTSTR lpszClass = NULL  );
      // Removes single control from the map
      BOOL RemoveControl( HWND hWnd );      

      void AddDialog( HWND hWnd );          // Add dialog
      void RemoveDialog( HWND hWnd );       // Removes dialog window from the map

      void Enable( BOOL bEnable = TRUE );   // Temporary enable/disable control manager
      BOOL IsEnabled() const;               // Returns TRUE if control manager is enabled

      void TimerProc();                     // Timer procedure 

      static CMapPtrToPtr m_ctrlMap;        // Main control map      
      static CMapWordToPtr m_threadMap;     // Main thread map      

   protected:
      // Other class members      
      static BOOL m_bEnabled;               // TRUE if control manager is enabled
      BOOL m_bDialogOnly;                   // Process only controls in dialogs
      HOOKPROC m_hkWndProc;                 // Old WH_WNDPROC hook procedure
      UINT m_uTimerID;                      // Our timer identifier
      static CMapPtrToPtr m_dlgMap;         // Map for dialog window (in general - for owner of controls)

      // Give access to the protected members for these functions
      friend LRESULT CALLBACK CCM_CallWndProc( int nCode, WPARAM wParam, LPARAM lParam );
      friend static LRESULT CALLBACK CCM_DialogProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
      friend static LRESULT CALLBACK CCM_ControlProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
      friend static void CALLBACK CCM_TimerProc( HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime );
};

//////////////////////////////////////////////////////////////////////////////////////////
// CCoolControlsManager inlines

inline
void CCoolControlsManager::Enable( BOOL bEnable )
{
   m_bEnabled = bEnable;
}

inline
BOOL CCoolControlsManager::IsEnabled() const
{
   return m_bEnabled;
}

/////////////////////////////////////////////////////////////////////////////
// CCMControl inlines

inline
void CCoolControlsManager::CCMControl::SetState( int nFlagRemove, int nFlagAdd, BOOL bRedraw )
{
   m_nState &= ~nFlagRemove;
   m_nState |= nFlagAdd;
   if ( bRedraw )
      DrawBorder();
}

inline
int CCoolControlsManager::CCMControl::GetState() const
{
   return m_nState;
}

// Gives access to the one and only CCoolControlsManager object
CCoolControlsManager& GetCtrlManager();

#endif // __CoolControlsManager_h

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -