// XTPSearchOptionsCtrl.h : header file // // 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(__XTPSEARCHOPTIONSCTRL_H__) #define __XTPSEARCHOPTIONSCTRL_H__ //}}AFX_CODEJOCK_PRIVATE #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 //=========================================================================== // Summary: // CXTPSearchOptionsCtrl is a CStatic derived class. CXTPSearchOptionsCtrl // is used to create a control similar to the Search Options item found // in the search pane of Windows Explorer as it is seen in Windows 2000 and // later. This class allows you to associate a group of controls to be // hidden or shown when the item is expanded and contracted and a set // of controls that need to move depending on the CXTPSearchOptionsCtrl state. // // Use with CXTPSearchOptionsView form view class to create a pane similar // to the Windows Explorer search pane. To use the control, define a set // of controls that are to be hidden and moved depending on the // CXTPSearchOptionsCtrl state. // // Example: // The following example demonstrates how to use CXTPSearchOptionsCtrl. // // void CExpandTestView::OnInitialUpdate() // { // CXTPSearchOptionsView::OnInitialUpdate(); // // m_expand.AddControl(&m_check1); // m_expand.AddControl(&m_check2); // m_expand.AddControl(&m_edit1); // m_expand.AddControl(&m_edit2); // // m_expand.MoveControl(&m_button1); // m_expand.MoveControl(&m_button2); // m_expand.MoveControl(&m_combo1); // // m_expand.SetLabelText( // _T("Search Options <<"), _T("Search Options >>")); // } // // // See the "SearchOptions" demo for a complete example. //=========================================================================== class _XTP_EXT_CLASS CXTPSearchOptionsCtrl : public CStatic { DECLARE_DYNAMIC(CXTPSearchOptionsCtrl) public: //----------------------------------------------------------------------- // Summary: // Constructs a CXTPSearchOptionsCtrl object //----------------------------------------------------------------------- CXTPSearchOptionsCtrl(); //----------------------------------------------------------------------- // Summary: // Destroys a CXTPSearchOptionsCtrl object, handles cleanup and deallocation //----------------------------------------------------------------------- virtual ~CXTPSearchOptionsCtrl(); public: //----------------------------------------------------------------------- // Summary: // Call this member function to determine if the search options // control has been expanded. // Returns: // True if expanded, otherwise returns false. //----------------------------------------------------------------------- bool IsExpanded() const; //----------------------------------------------------------------------- // Summary: // Call this member function to add a control to the list of controls // that are displayed when the hide item control is expanded. // Parameters: // pWndCtrl - Points to a valid CWnd object to hide. //----------------------------------------------------------------------- void AddControl(CWnd* pWndCtrl); //----------------------------------------------------------------------- // Summary: // Call this member function to add a control to the list of controls // that are moved when the hide item control is either expanded or contracted. // Parameters: // pWndCtrl - Points to a valid CWnd object to move. //----------------------------------------------------------------------- void MoveControl(CWnd* pWndCtrl); //----------------------------------------------------------------------- // Summary: // Call this member function to set the text that is displayed when the // hide item control is either expanded or contracted. // Parameters: // lpszExpand - NULL terminated string that represents the text displayed when // the control is expanded. // lpszContract - NULL terminated string that represents the text displayed when // the control is contracted. //----------------------------------------------------------------------- void SetLabelText(LPCTSTR lpszExpand, LPCTSTR lpszContract); //----------------------------------------------------------------------- // Summary: // Call this member function to expand the hide item control and display // CWnd objects contained in the hide item list. Called by the control // whenever the user clicks on the expand label. //----------------------------------------------------------------------- void Expand(); //----------------------------------------------------------------------- // Summary: // Call this member function to contract the hide item control and hide // CWnd objects contained in the hide item list. Called by the control // whenever the user clicks on the contract label. //----------------------------------------------------------------------- void Contract(); //----------------------------------------------------------------------- // Summary: // Call this member function to return the minimum height of the hide // item control. // Returns: // An integer value that represents the height of the // control when it is contracted. //----------------------------------------------------------------------- int GetMinSize(); //----------------------------------------------------------------------- // Summary: // Call this member function to return the maximum height of the hide // item control. // Returns: // An integer value that represents the height of the // control when it is expanded. //----------------------------------------------------------------------- int GetMaxSize(); //----------------------------------------------------------------------- // Summary: // Call this member function to return the offset size for the // CXTPSearchOptionsCtrl object. This is the distance the controls will // be moved to accommodate for the expansion and contraction of the control. // Also used by CXTPSearchOptionsView for adjusting scroll sizes. // Returns: // An integer value that represents the distance the controls will be moved. //----------------------------------------------------------------------- int GetOffsetSize(); protected: //----------------------------------------------------------------------- // Summary: // This member function is called by the CXTPSearchOptionsCtrl 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(); //{{AFX_CODEJOCK_PRIVATE DECLARE_MESSAGE_MAP() //{{AFX_VIRTUAL(CXTPSearchOptionsCtrl) virtual void PreSubclassWindow(); virtual BOOL PreCreateWindow(CREATESTRUCT& cs); //}}AFX_VIRTUAL //{{AFX_MSG(CXTPSearchOptionsCtrl) afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); afx_msg void OnWindowPosChanged(WINDOWPOS FAR* lpwndpos); afx_msg void OnEnable(BOOL bEnable); //}}AFX_MSG //}}AFX_CODEJOCK_PRIVATE protected: int m_iMinSize; // Height of the control when contracted. int m_iMaxSize; // Height of the control when expanded. bool m_bExpanded; // true when the control is expanded. bool m_bPreSubclassInit; // true for initialization. CRect m_rcLabel; // Size of the label that is displayed. CString m_strExpandLabel; // Label to display when the control is expanded. CString m_strContractLabel; // Label to display when the control is contracted. CPtrArray m_arHideCtrls; // List of controls to show or hide. CPtrArray m_arMoveCtrls; // List of controls to move when expanded or contracted. }; ////////////////////////////////////////////////////////////////////// AFX_INLINE int CXTPSearchOptionsCtrl::GetMinSize() { return m_iMinSize; } AFX_INLINE int CXTPSearchOptionsCtrl::GetMaxSize() { return m_iMaxSize; } AFX_INLINE int CXTPSearchOptionsCtrl::GetOffsetSize() { return GetMaxSize()-GetMinSize(); } AFX_INLINE bool CXTPSearchOptionsCtrl::IsExpanded() const { return m_bExpanded; } // forwards class CXTPSearchOptionsCtrl; //=========================================================================== // Summary: // CXTPSearchOptionsView is a CFormView derived class. It is to // be used with a CXTPSearchOptionsCtrl object to paint the background // and control background color white. It is also used for resizing // and moving children of the form automatically. //=========================================================================== class _XTP_EXT_CLASS CXTPSearchOptionsView : public CFormView { DECLARE_DYNAMIC(CXTPSearchOptionsView) private: // CResizeWnd - private helper class class CResizeWnd { public: CResizeWnd(CWnd* pWndParent, HWND hWndChild, const XTP_RESIZEPOINT& ptTopLeft, const XTP_RESIZEPOINT& ptTopRight); virtual ~CResizeWnd(); bool Resize(HDWP& hDWP, float iOffset); bool IsGroupBox(); HWND m_hWndChild; CWnd* m_pWndParent; CRect m_rcWindow; CRect m_rcParent; CXTPResizeRect m_rcSizing; }; private: // CResizeWndArray - private helper class typedef CList CResizeWndArray; protected: //----------------------------------------------------------------------- // Summary: // When you create an object of a type derived from CXTPSearchOptionsView, invoke one of // the constructors to create the view object and identify the dialog resource // on which the view is based. You can identify the resource either by name // (pass a string as the argument to the constructor) or by its ID (pass an // unsigned integer as the argument). // Parameters: // nIDTemplate - Contains the ID number of a dialog-template resource. // lpszTemplateName - Contains a null-terminated string that is the name of // a dialog-template resource. // // The form-view window and child controls are not created until CWnd::Create // is called. CWnd::Create is called by the framework as part of the document // and view creation process, which is driven by the document template. //----------------------------------------------------------------------- CXTPSearchOptionsView(UINT nIDTemplate); CXTPSearchOptionsView(LPCTSTR lpszTemplateName); // //----------------------------------------------------------------------- // Summary: // Destroys a CXTPSearchOptionsView object, handles cleanup and deallocation //----------------------------------------------------------------------- virtual ~CXTPSearchOptionsView(); protected: //----------------------------------------------------------------------- // Summary: // The SetResize function specifies how much each side of a control will // move when the dialog is resized. If a control should be repositioned // (e.g. an OK button), all four sides should move by the same amount // of pixels as the dialog is resized. If a control should be resized // just as much as the dialog (e.g. the list control in the file dialog), // the left and top sides should not move, and the right and bottom // sides should move by the same amount of pixels as the dialog. // Parameters: // nID - Specifies the control's ID. // ptTopLeft - How much the top and left sides will move when the dialog is resized. // ptTopRight - How much the bottom and right sides will move when the dialog is resized. //----------------------------------------------------------------------- void SetResize(int nID, const XTP_RESIZEPOINT& ptTopLeft, const XTP_RESIZEPOINT& ptTopRight); //----------------------------------------------------------------------- // Summary: // Call this member function to adjust the scroll sizes for the form view. // Parameters: // pSOCtrl - Points to the CXTPSearchOpetionsCtrl object to adjust the scroll // sizes for. // bAdd - True to add the size, false to subtract size. //----------------------------------------------------------------------- void AdjustScrollSizes(CXTPSearchOptionsCtrl* pSOCtrl, bool bAdd); public: virtual COLORREF GetBackColor() const; protected: //{{AFX_CODEJOCK_PRIVATE DECLARE_MESSAGE_MAP() //{{AFX_VIRTUAL(CXTPSearchOptionsView) protected: virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam); virtual BOOL OnInitDialog(); //}}AFX_VIRTUAL //{{AFX_MSG(CXTPSearchOptionsView) afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); afx_msg void OnSize(UINT nType, int cx, int cy); //}}AFX_MSG //}}AFX_CODEJOCK_PRIVATE protected: HBRUSH m_hBrush; // Handle to the current background brush COLORREF m_clrBrush; CRect m_rcWindow; // Original size of the window. CResizeWndArray m_arResizeWnd; // Array of children to move or resize. }; #endif // !defined(__XTPSEARCHOPTIONSCTRL_H__)