XTPPropertySheet.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:19k
- // XTPPropertySheet.h : interface for the CXTPPropertySheet class.
- //
- // This file is a part of the XTREME CONTROLS MFC class library.
- // (c)1998-2008 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(__XTPPROPERTYSHEET_H__)
- #define __XTPPROPERTYSHEET_H__
- //}}AFX_CODEJOCK_PRIVATE
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- #include "XTPPropertyPage.h"
- class CXTPPropertyPageNavigator;
- //-----------------------------------------------------------------------
- // Summary:
- // XTPPropertyPageBorder is an enumeration used to set the client frame style drawn around the client of tabs.
- // Example:
- // <code>wndSheet.SetPageBorderStyle(xtpPageBorderFrame);</code>
- // See Also: CXTPPropertySheet
- //
- // <KEYWORDS xtpPageBorderNone, xtpPageBorderBottomLine, xtpPageBorderFrame>
- //-----------------------------------------------------------------------
- enum XTPPropertyPageBorder
- {
- xtpPageBorderNone,
- xtpPageBorderBottomLine,
- xtpPageBorderFrame
- };
- //===========================================================================
- // Summary:
- // CXTPPropertySheet is a CDialog derived class
- // It represents property sheet, otherwise known as tab dialog box.
- // A property sheet consists of a CXTPPropertySheet object and one or more CXTPPropertyPage objects.
- // See Also:
- // CXTPPropertySheet::DoModal, CXTPPropertyPage, CXTPPropertyPageNavigator
- //===========================================================================
- class _XTP_EXT_CLASS CXTPPropertySheet : public CDialog
- {
- DECLARE_DYNAMIC(CXTPPropertySheet)
- public:
- //-----------------------------------------------------------------------
- // Summary:
- // Constructs a CXTPPropertySheet object.
- // Parameters:
- // nIDCaption - ID of the caption to be used for the property sheet.
- // pParentWnd - Points to the parent window of the property sheet. If NULL, the parent window will be the main window of the application.
- // iSelectPage - The index of the page that will initially be on top. Default is the first page added to the sheet
- // pszCaption - Points to a string containing the caption to be used for the property sheet. Cannot be NULL
- // Remarks:
- // Use this member function to construct a CPropertySheet object.
- // To display the property sheet, call DoModal or Create.
- // The string contained in the first parameter will be placed in the caption bar for the property sheet.
- //-----------------------------------------------------------------------
- CXTPPropertySheet();
- CXTPPropertySheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); // <combine CXTPPropertySheet::CXTPPropertySheet>
- CXTPPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); // <combine CXTPPropertySheet::CXTPPropertySheet>
- //-----------------------------------------------------------------------
- // Summary:
- // Destroys a CXTPPropertySheet object, handles cleanup and deallocation
- //-----------------------------------------------------------------------
- ~CXTPPropertySheet();
- public:
- //-----------------------------------------------------------------------
- // Summary:
- // Displays a modeless property sheet.
- // Parameters:
- // pParentWnd - Points to parent window. If NULL, parent is the desktop.
- // dwStyle - Window styles for property sheet
- // dwExStyle - Extended window styles for property sheet
- // Remarks:
- // The default style, expressed by passing -1 as dwStyle, is actually
- // WS_SYSMENU | WS_POPUP | WS_CAPTION | DS_MODALFRAME | DS_CONTEXT_HELP | WS_VISIBLE.
- //
- // To display a modal property sheet, call DoModal instead.
- // See Also:
- // CXTPPropertySheet::DoModal
- //-----------------------------------------------------------------------
- BOOL Create(CWnd* pParentWnd = NULL, DWORD dwStyle = (DWORD)-1, DWORD dwExStyle = 0);
- //-----------------------------------------------------------------------
- // Summary:
- // Displays a modal property sheet.
- // Returns:
- // IDOK or IDCANCEL if the function was successful; otherwise 0 or -1.
- // Remarks:
- // Call this member function to display a modal property sheet.
- // The return value corresponds to the ID of the control that closed the property sheet.
- // After this function returns, the windows corresponding to the property sheet and all the pages
- // will have been destroyed.
- //
- // To display a modeless property sheet, call Create instead.
- // See Also:
- // CXTPPropertySheet::Create
- //-----------------------------------------------------------------------
- INT_PTR DoModal();
- public:
- //-----------------------------------------------------------------------
- // Summary:
- // Adds a page to the property sheet.
- // Parameters:
- // pPage - Points to the page to be added to the property sheet. Cannot be NULL.
- // Remarks:
- // This member function adds the supplied page with the rightmost tab in the property sheet.
- // Add pages to the property sheet in the left-to-right order you want them to appear.
- //
- // AddPage adds the CPropertyPage object to the CPropertySheet object's list of pages but does
- // not actually create the window for the page. The framework postpones creation of the window for the page until the user selects that page.
- // See Also:
- // CXTPPropertySheet::GetPageCount
- //-----------------------------------------------------------------------
- void AddPage(CXTPPropertyPage* pPage);
- //-----------------------------------------------------------------------
- // Summary:
- // Retrieves the number of pages in the property sheet.
- // Returns:
- // The number of pages in the property sheet.
- // Remarks:
- // Call this member function to determine the number of pages currently in the property sheet.
- // See Also:
- // CXTPPropertySheet::AddPage, CXTPPropertySheet::GetPage
- //-----------------------------------------------------------------------
- int GetPageCount() const;
- //-----------------------------------------------------------------------
- // Summary:
- // Retrieves a pointer to the specified page.
- // Parameters:
- // nPage - Index of the desired page, starting at 0.
- // Must be between 0 and one less than the number of pages in the property sheet, inclusive.
- // Returns:
- // The pointer to the page corresponding to the nPage parameter.
- // Remarks:
- // Call this member function to determine the number of pages currently in the property sheet.
- // See Also:
- // CXTPPropertySheet::AddPage, CXTPPropertySheet::GetPageCount
- //-----------------------------------------------------------------------
- CXTPPropertyPage* GetPage(int nPage) const;
- //-----------------------------------------------------------------------
- // Summary:
- // Retrieves the index of the specified page of the property sheet.
- // Parameters:
- // pPage - Points to the page with the index to be found. Cannot be NULL
- // Returns:
- // The index number of a page.
- // Remarks:
- // Use this member function to retrieve the index number of the specified page in the property sheet.
- // For example, you would use GetPageIndex to get the page index in order to use SetActivePage or GetPage..
- // See Also:
- // CXTPPropertySheet::GetActivePage
- //-----------------------------------------------------------------------
- int GetPageIndex(CXTPPropertyPage* pPage) const;
- //-----------------------------------------------------------------------
- // Summary:
- // Returns the active page object.
- // Returns:
- // The pointer to the active page.
- // Remarks:
- // Call this member function to retrieve the property sheet window's active page.
- // Use this member function to perform some action on the active page
- // See Also:
- // CXTPPropertySheet::GetPage
- //-----------------------------------------------------------------------
- CXTPPropertyPage* GetActivePage() const;
- //-----------------------------------------------------------------------
- // Summary:
- // Retrieves the index of the active page of the property sheet.
- // Returns:
- // The index number of the active page.
- // Remarks:
- // Call this member function to get the index number of the property sheet window's active page,
- // then use the returned index number as the parameter for GetPage.
- // See Also:
- // CXTPPropertySheet::GetActivePage
- //-----------------------------------------------------------------------
- int GetActiveIndex() const;
- //-----------------------------------------------------------------------
- // Summary:
- // Programmatically sets the active page object.
- // Parameters:
- // pPage - Points to the page to set in the property sheet. It cannot be NULL.
- // nPage - Index of the page to set. It must be between 0 and one less than the number of pages in the property sheet, inclusive.
- // Returns:
- // Nonzero if the property sheet is activated successfully; otherwise 0.
- // Remarks:
- // Use this member function to change the active page.
- // For example, use SetActivePage if a user's action on one page should cause another page to become the active page.
- // See Also:
- // CXTPPropertySheet::GetActivePage
- //-----------------------------------------------------------------------
- BOOL SetActivePage(int nPage);
- BOOL SetActivePage(CXTPPropertyPage* pPage); // <combine CXTPPropertySheet::SetActivePage@int>
- //-----------------------------------------------------------------------
- // Summary:
- // Sets the caption of the property sheet.
- // Parameters:
- // lpszText - Points to the text to be used as the caption in the title bar of the property sheet.
- // Remarks:
- // Call this member function to specify the property sheet's caption
- // (the text displayed in the title bar of a frame window).
- // See Also:
- // CXTPPropertySheet::GetPage
- //-----------------------------------------------------------------------
- void SetTitle(LPCTSTR lpszText);
- //-----------------------------------------------------------------------
- // Summary:
- // Returns bounding rectangle for all property pages.
- // Returns:
- // CRect bounding rectangle for all property pages.
- //-----------------------------------------------------------------------
- CRect GetPageRect() const;
- public:
- //-----------------------------------------------------------------------
- // Summary:
- // Returns currently used navigator object
- // Returns:
- // CXTPPropertyPageNavigator class pointer presented navigator object
- // See Also:
- // CXTPPropertySheet::SetNavigator
- //-----------------------------------------------------------------------
- CXTPPropertyPageNavigator* GetNavigator() const;
- //-----------------------------------------------------------------------
- // Summary:
- // Sets navigator object that will be used to switch property pages
- // Parameters:
- // pNavigator - CXTPPropertyPageNavigator class pointer that will be set as new navigator
- // Remarks:
- // CXTPPropertyPageNavigator class used to specify how user will navigate and switch pages.
- // Default navigator classes are:
- // * <b>CXTPPropertyPageTabNavigator</b> - represents TabControl navigator
- // * <b>CXTPPropertyPageListNavigator</b> - represents List navigator
- // * <b>CXTPPropertyPageTreeNavigator</b> - represents Tree navigator
- // Example:
- // <code>
- // CXTPPropertyPageListNavigator* pList = new CXTPPropertyPageListNavigator();
- // pList->SetListStyle(xtListBoxOffice2007);
- // ps.SetNavigator(pList);
- // </code>
- // See Also:
- // CXTPPropertySheet::GetNavigator
- //-----------------------------------------------------------------------
- void SetNavigator(CXTPPropertyPageNavigator* pNavigator);
- public:
- //-----------------------------------------------------------------------
- // Summary:
- // Adds new button to property sheet window
- // Parameters:
- // nIDCaption - ID of the caption to be used for the property sheet button.
- // nID - identifier to be used for the property sheet button.
- // Returns:
- // Nonzero if the property sheet is activated successfully; otherwise 0.
- // See Also:
- // CXTPPropertySheet::RemoveButtons
- //-----------------------------------------------------------------------
- BOOL AddButton(UINT nIDCaption, UINT nID);
- //-----------------------------------------------------------------------
- // Summary:
- // Deletes all buttons from property sheet
- // See Also:
- // CXTPPropertySheet::AddButton
- //-----------------------------------------------------------------------
- void RemoveButtons();
- //-----------------------------------------------------------------------
- // Summary:
- // Sets border around client page rectangle
- // Parameters:
- // nBorder - Border style to be set
- // See Also:
- // XTPPropertyPageBorder, CXTPPropertySheet::GetPageBorderStyle
- //-----------------------------------------------------------------------
- void SetPageBorderStyle(XTPPropertyPageBorder nBorder);
- //-----------------------------------------------------------------------
- // Summary:
- // Retrieves border style around client page rectangle
- // Returns:
- // XTPPropertyPageBorder Border style.
- // See Also:
- // XTPPropertyPageBorder, CXTPPropertySheet::SetPageBorderStyle
- //-----------------------------------------------------------------------
- XTPPropertyPageBorder GetPageBorderStyle() const;
- //-----------------------------------------------------------------------
- // Summary:
- // Call this member to allow user resize property sheet
- // Parameters:
- // bResizable - TRUE to allow user resize property sheet
- //-----------------------------------------------------------------------
- void SetResizable(BOOL bResizable = TRUE);
- //-----------------------------------------------------------------------
- // Summary:
- // Call this member to set custom size for property pages
- // Parameters:
- // szPage - New page size to be set
- //-----------------------------------------------------------------------
- void SetPageSize(CSize szPage);
- protected:
- //-----------------------------------------------------------------------
- // Summary:
- // This method is called to create all property sheet buttons
- //-----------------------------------------------------------------------
- virtual BOOL CreateButtons();
- //-----------------------------------------------------------------------
- // Summary:
- // This method is called to create property page window
- // Parameters:
- // pPage - Page to be created
- //-----------------------------------------------------------------------
- virtual BOOL CreatePage(CXTPPropertyPage* pPage);
- //{{AFX_CODEJOCK_PRIVATE
- public:
- CFont* GetFont();
- void EndDialog(int nEndID);
- void RecalcLayout(LPSIZE pPageSize = NULL, BOOL bMoveWindow = FALSE);
- BOOL IsWizard() const;
- protected:
- void CommonConstruct(CWnd* pParentWnd, UINT iSelectPage);
- protected:
- BOOL CreateClient();
- void ResizeParentToFit(CSize szClient, BOOL bMoveWindow);
- BOOL IsPositionRelativeToWindow();
- void MoveButtons(AFX_SIZEPARENTPARAMS* pLayout, CSize szClient);
- void CreateFont();
- private:
- void PageInfoChanged(CXTPPropertyPage* pPage, BOOL bModified);
- BOOL OnButtonClick(UINT nButton);
- LRESULT SendPageNotify(CXTPPropertyPage* pPage, int code, LPARAM lParam = 0);
- TCHAR ToUpper(TCHAR vkTCHAR);
- //}}AFX_CODEJOCK_PRIVATE
- protected:
- //{{AFX_CODEJOCK_PRIVATE
- DECLARE_MESSAGE_MAP()
- //{{AFX_VIRTUAL(CXTPPropertySheet)
- public:
- virtual BOOL PreTranslateMessage(MSG* pMsg);
- protected:
- virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
- virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
- virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
- //}}AFX_VIRTUAL
- //{{AFX_MSG(CXTPPropertySheet)
- afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
- afx_msg void OnDestroy();
- virtual BOOL OnInitDialog();
- afx_msg LRESULT OnCommandHelp(WPARAM wParam, LPARAM lParam);
- afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
- afx_msg void OnClose();
- afx_msg void OnPaint();
- afx_msg LRESULT OnQuerySiblings(WPARAM wParam, LPARAM lParam);
- afx_msg void OnSize(UINT nType, int cx, int cy);
- afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM);
- //}}AFX_MSG
- //}}AFX_CODEJOCK_PRIVATE
- protected:
- CString m_strCaption; // Caption of the dialog
- LPDLGTEMPLATE m_lpDlgTemplate; // Dialog template
- CArray<CButton*, CButton*> m_arrButtons; // Array of buttons of property sheet
- CXTPPropertyPageNavigator* m_pNavigator; // Currently used navigator
- CFont m_fntNormal; // Font used to draw buttons and navigator
- CArray<CXTPPropertyPage*, CXTPPropertyPage*> m_arrPages; // Array of propety pages
- CXTPPropertyPage* m_pActivePage; // Pointer to active property page
- CRect m_rcPage; // Bounding rectangle of active page
- BOOL m_bAllowApply; // TRUE to allow enable apply button
- BOOL m_bModeless; // TRUE if property sheet was created as modeless window
- BOOL m_bResizable; // TRUE if dialog can be resized
- CSize m_szWindow; // Last window size of property sheet
- CSize m_szButton; // Button size
- CScrollBar m_scSizeIcon; // Resize glyph
- XTPPropertyPageBorder m_nPageBorderStyle; // Client border style
- public:
- PROPSHEETHEADER m_psh; // The Windows PROPSHEETHEADER structure. Provides access to basic property sheet parameters.
- };
- AFX_INLINE int CXTPPropertySheet::GetPageCount() const {
- return (int)m_arrPages.GetSize();
- }
- AFX_INLINE CXTPPropertyPage* CXTPPropertySheet::GetPage(int nPage) const {
- return nPage >= 0 && nPage < m_arrPages.GetSize() ? m_arrPages.GetAt(nPage) : NULL;
- }
- AFX_INLINE CXTPPropertyPage* CXTPPropertySheet::GetActivePage() const {
- return m_hWnd ? m_pActivePage : GetPage(m_psh.nStartPage);
- }
- AFX_INLINE int CXTPPropertySheet::GetActiveIndex() const {
- return m_hWnd ? GetPageIndex(m_pActivePage) : m_psh.nStartPage;
- }
- AFX_INLINE CXTPPropertyPageNavigator* CXTPPropertySheet::GetNavigator() const {
- return m_pNavigator;
- }
- AFX_INLINE CFont* CXTPPropertySheet::GetFont() {
- return &m_fntNormal;
- }
- AFX_INLINE CRect CXTPPropertySheet::GetPageRect() const {
- return m_rcPage;
- }
- AFX_INLINE XTPPropertyPageBorder CXTPPropertySheet::GetPageBorderStyle() const {
- return m_nPageBorderStyle;
- }
- AFX_INLINE INT_PTR CXTPPropertySheet::DoModal() {
- return CDialog::DoModal();
- }
- #endif // !defined(__XTPPROPERTYSHEET_H__)