You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
349 lines
14 KiB
C
349 lines
14 KiB
C
2 years ago
|
// 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.
|
||
|
// <code>
|
||
|
// 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 >>"));
|
||
|
// }
|
||
|
// </code>
|
||
|
//
|
||
|
// 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<CResizeWnd*, CResizeWnd*> 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); // <combine CXTPSearchOptionsView::CXTPSearchOptionsView@UINT>
|
||
|
|
||
|
//-----------------------------------------------------------------------
|
||
|
// 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__)
|