// 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__)