XTPPropertySheet.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:19k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPPropertySheet.h : interface for the CXTPPropertySheet class.
  2. //
  3. // This file is a part of the XTREME CONTROLS MFC class library.
  4. // (c)1998-2008 Codejock Software, All Rights Reserved.
  5. //
  6. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  7. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  8. // CONSENT OF CODEJOCK SOFTWARE.
  9. //
  10. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  11. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  12. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  13. // SINGLE COMPUTER.
  14. //
  15. // CONTACT INFORMATION:
  16. // support@codejock.com
  17. // http://www.codejock.com
  18. //
  19. /////////////////////////////////////////////////////////////////////////////
  20. //{{AFX_CODEJOCK_PRIVATE
  21. #if !defined(__XTPPROPERTYSHEET_H__)
  22. #define __XTPPROPERTYSHEET_H__
  23. //}}AFX_CODEJOCK_PRIVATE
  24. #if _MSC_VER > 1000
  25. #pragma once
  26. #endif // _MSC_VER > 1000
  27. #include "XTPPropertyPage.h"
  28. class CXTPPropertyPageNavigator;
  29. //-----------------------------------------------------------------------
  30. // Summary:
  31. //     XTPPropertyPageBorder is an enumeration used to set the client frame style drawn around the client of tabs.
  32. // Example:
  33. //     <code>wndSheet.SetPageBorderStyle(xtpPageBorderFrame);</code>
  34. // See Also: CXTPPropertySheet
  35. //
  36. // <KEYWORDS xtpPageBorderNone, xtpPageBorderBottomLine, xtpPageBorderFrame>
  37. //-----------------------------------------------------------------------
  38. enum XTPPropertyPageBorder
  39. {
  40. xtpPageBorderNone,
  41. xtpPageBorderBottomLine,
  42. xtpPageBorderFrame
  43. };
  44. //===========================================================================
  45. // Summary:
  46. //     CXTPPropertySheet is a CDialog derived class
  47. //     It represents property sheet, otherwise known as tab dialog box.
  48. //     A property sheet consists of a CXTPPropertySheet object and one or more CXTPPropertyPage objects.
  49. // See Also:
  50. //     CXTPPropertySheet::DoModal, CXTPPropertyPage, CXTPPropertyPageNavigator
  51. //===========================================================================
  52. class _XTP_EXT_CLASS CXTPPropertySheet : public CDialog
  53. {
  54. DECLARE_DYNAMIC(CXTPPropertySheet)
  55. public:
  56. //-----------------------------------------------------------------------
  57. // Summary:
  58. //     Constructs a CXTPPropertySheet object.
  59. // Parameters:
  60. //     nIDCaption - ID of the caption to be used for the property sheet.
  61. //     pParentWnd - Points to the parent window of the property sheet. If NULL, the parent window will be the main window of the application.
  62. //     iSelectPage  - The index of the page that will initially be on top. Default is the first page added to the sheet
  63. //     pszCaption  - Points to a string containing the caption to be used for the property sheet. Cannot be NULL
  64. // Remarks:
  65. //     Use this member function to construct a CPropertySheet object.
  66. //     To display the property sheet, call DoModal or Create.
  67. //     The string contained in the first parameter will be placed in the caption bar for the property sheet.
  68. //-----------------------------------------------------------------------
  69. CXTPPropertySheet();
  70. CXTPPropertySheet(UINT nIDCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); // <combine CXTPPropertySheet::CXTPPropertySheet>
  71. CXTPPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); // <combine CXTPPropertySheet::CXTPPropertySheet>
  72. //-----------------------------------------------------------------------
  73. // Summary:
  74. //     Destroys a CXTPPropertySheet object, handles cleanup and deallocation
  75. //-----------------------------------------------------------------------
  76. ~CXTPPropertySheet();
  77. public:
  78. //-----------------------------------------------------------------------
  79. // Summary:
  80. //     Displays a modeless property sheet.
  81. // Parameters:
  82. //     pParentWnd - Points to parent window. If NULL, parent is the desktop.
  83. //     dwStyle - Window styles for property sheet
  84. //     dwExStyle  - Extended window styles for property sheet
  85. // Remarks:
  86. //     The default style, expressed by passing -1 as dwStyle, is actually
  87. //     WS_SYSMENU | WS_POPUP | WS_CAPTION | DS_MODALFRAME | DS_CONTEXT_HELP | WS_VISIBLE.
  88. //
  89. //     To display a modal property sheet, call DoModal instead.
  90. // See Also:
  91. //     CXTPPropertySheet::DoModal
  92. //-----------------------------------------------------------------------
  93. BOOL Create(CWnd* pParentWnd = NULL, DWORD dwStyle = (DWORD)-1, DWORD dwExStyle = 0);
  94. //-----------------------------------------------------------------------
  95. // Summary:
  96. //     Displays a modal property sheet.
  97. // Returns:
  98. //     IDOK or IDCANCEL if the function was successful; otherwise 0 or -1.
  99. // Remarks:
  100. //     Call this member function to display a modal property sheet.
  101. //     The return value corresponds to the ID of the control that closed the property sheet.
  102. //     After this function returns, the windows corresponding to the property sheet and all the pages
  103. //     will have been destroyed.
  104. //
  105. //     To display a modeless property sheet, call Create instead.
  106. // See Also:
  107. //     CXTPPropertySheet::Create
  108. //-----------------------------------------------------------------------
  109. INT_PTR DoModal();
  110. public:
  111. //-----------------------------------------------------------------------
  112. // Summary:
  113. //     Adds a page to the property sheet.
  114. // Parameters:
  115. //     pPage - Points to the page to be added to the property sheet. Cannot be NULL.
  116. // Remarks:
  117. //     This member function adds the supplied page with the rightmost tab in the property sheet.
  118. //     Add pages to the property sheet in the left-to-right order you want them to appear.
  119. //
  120. //     AddPage adds the CPropertyPage object to the CPropertySheet object's list of pages but does
  121. //     not actually create the window for the page. The framework postpones creation of the window for the page until the user selects that page.
  122. // See Also:
  123. //     CXTPPropertySheet::GetPageCount
  124. //-----------------------------------------------------------------------
  125. void AddPage(CXTPPropertyPage* pPage);
  126. //-----------------------------------------------------------------------
  127. // Summary:
  128. //     Retrieves the number of pages in the property sheet.
  129. // Returns:
  130. //     The number of pages in the property sheet.
  131. // Remarks:
  132. //     Call this member function to determine the number of pages currently in the property sheet.
  133. // See Also:
  134. //     CXTPPropertySheet::AddPage, CXTPPropertySheet::GetPage
  135. //-----------------------------------------------------------------------
  136. int GetPageCount() const;
  137. //-----------------------------------------------------------------------
  138. // Summary:
  139. //     Retrieves a pointer to the specified page.
  140. // Parameters:
  141. //     nPage - Index of the desired page, starting at 0.
  142. //             Must be between 0 and one less than the number of pages in the property sheet, inclusive.
  143. // Returns:
  144. //     The pointer to the page corresponding to the nPage parameter.
  145. // Remarks:
  146. //     Call this member function to determine the number of pages currently in the property sheet.
  147. // See Also:
  148. //     CXTPPropertySheet::AddPage, CXTPPropertySheet::GetPageCount
  149. //-----------------------------------------------------------------------
  150. CXTPPropertyPage* GetPage(int nPage) const;
  151. //-----------------------------------------------------------------------
  152. // Summary:
  153. //     Retrieves the index of the specified page of the property sheet.
  154. // Parameters:
  155. //     pPage - Points to the page with the index to be found. Cannot be NULL
  156. // Returns:
  157. //     The index number of a page.
  158. // Remarks:
  159. //     Use this member function to retrieve the index number of the specified page in the property sheet.
  160. //     For example, you would use GetPageIndex to get the page index in order to use SetActivePage or GetPage..
  161. // See Also:
  162. //     CXTPPropertySheet::GetActivePage
  163. //-----------------------------------------------------------------------
  164. int GetPageIndex(CXTPPropertyPage* pPage) const;
  165. //-----------------------------------------------------------------------
  166. // Summary:
  167. //     Returns the active page object.
  168. // Returns:
  169. //     The pointer to the active page.
  170. // Remarks:
  171. //     Call this member function to retrieve the property sheet window's active page.
  172. //     Use this member function to perform some action on the active page
  173. // See Also:
  174. //     CXTPPropertySheet::GetPage
  175. //-----------------------------------------------------------------------
  176. CXTPPropertyPage* GetActivePage() const;
  177. //-----------------------------------------------------------------------
  178. // Summary:
  179. //     Retrieves the index of the active page of the property sheet.
  180. // Returns:
  181. //     The index number of the active page.
  182. // Remarks:
  183. //     Call this member function to get the index number of the property sheet window's active page,
  184. //     then use the returned index number as the parameter for GetPage.
  185. // See Also:
  186. //     CXTPPropertySheet::GetActivePage
  187. //-----------------------------------------------------------------------
  188. int GetActiveIndex() const;
  189. //-----------------------------------------------------------------------
  190. // Summary:
  191. //     Programmatically sets the active page object.
  192. // Parameters:
  193. //     pPage - Points to the page to set in the property sheet. It cannot be NULL.
  194. //     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.
  195. // Returns:
  196. //     Nonzero if the property sheet is activated successfully; otherwise 0.
  197. // Remarks:
  198. //     Use this member function to change the active page.
  199. //     For example, use SetActivePage if a user's action on one page should cause another page to become the active page.
  200. // See Also:
  201. //     CXTPPropertySheet::GetActivePage
  202. //-----------------------------------------------------------------------
  203. BOOL SetActivePage(int nPage);
  204. BOOL SetActivePage(CXTPPropertyPage* pPage); // <combine CXTPPropertySheet::SetActivePage@int>
  205. //-----------------------------------------------------------------------
  206. // Summary:
  207. //     Sets the caption of the property sheet.
  208. // Parameters:
  209. //     lpszText - Points to the text to be used as the caption in the title bar of the property sheet.
  210. // Remarks:
  211. //     Call this member function to specify the property sheet's caption
  212. //     (the text displayed in the title bar of a frame window).
  213. // See Also:
  214. //     CXTPPropertySheet::GetPage
  215. //-----------------------------------------------------------------------
  216. void SetTitle(LPCTSTR lpszText);
  217. //-----------------------------------------------------------------------
  218. // Summary:
  219. //     Returns bounding rectangle for all property pages.
  220. // Returns:
  221. //     CRect bounding rectangle for all property pages.
  222. //-----------------------------------------------------------------------
  223. CRect GetPageRect() const;
  224. public:
  225. //-----------------------------------------------------------------------
  226. // Summary:
  227. //     Returns currently used navigator object
  228. // Returns:
  229. //     CXTPPropertyPageNavigator class pointer presented navigator object
  230. // See Also:
  231. //     CXTPPropertySheet::SetNavigator
  232. //-----------------------------------------------------------------------
  233. CXTPPropertyPageNavigator* GetNavigator() const;
  234. //-----------------------------------------------------------------------
  235. // Summary:
  236. //     Sets navigator object that will be used to switch property pages
  237. // Parameters:
  238. //     pNavigator - CXTPPropertyPageNavigator class pointer that will be set as new navigator
  239. // Remarks:
  240. //     CXTPPropertyPageNavigator class used to specify how user will navigate and switch pages.
  241. //     Default navigator classes are:
  242. //     * <b>CXTPPropertyPageTabNavigator</b> - represents TabControl navigator
  243. //     * <b>CXTPPropertyPageListNavigator</b> - represents List navigator
  244. //     * <b>CXTPPropertyPageTreeNavigator</b> - represents Tree navigator
  245. // Example:
  246. // <code>
  247. //     CXTPPropertyPageListNavigator* pList = new CXTPPropertyPageListNavigator();
  248. //     pList->SetListStyle(xtListBoxOffice2007);
  249. //     ps.SetNavigator(pList);
  250. // </code>
  251. // See Also:
  252. //     CXTPPropertySheet::GetNavigator
  253. //-----------------------------------------------------------------------
  254. void SetNavigator(CXTPPropertyPageNavigator* pNavigator);
  255. public:
  256. //-----------------------------------------------------------------------
  257. // Summary:
  258. //     Adds new button to property sheet window
  259. // Parameters:
  260. //     nIDCaption - ID of the caption to be used for the property sheet button.
  261. //     nID        - identifier to be used for the property sheet button.
  262. // Returns:
  263. //     Nonzero if the property sheet is activated successfully; otherwise 0.
  264. // See Also:
  265. //     CXTPPropertySheet::RemoveButtons
  266. //-----------------------------------------------------------------------
  267. BOOL AddButton(UINT nIDCaption, UINT nID);
  268. //-----------------------------------------------------------------------
  269. // Summary:
  270. //     Deletes all buttons from property sheet
  271. // See Also:
  272. //     CXTPPropertySheet::AddButton
  273. //-----------------------------------------------------------------------
  274. void RemoveButtons();
  275. //-----------------------------------------------------------------------
  276. // Summary:
  277. //     Sets border around client page rectangle
  278. // Parameters:
  279. //     nBorder - Border style to be set
  280. // See Also:
  281. //     XTPPropertyPageBorder, CXTPPropertySheet::GetPageBorderStyle
  282. //-----------------------------------------------------------------------
  283. void SetPageBorderStyle(XTPPropertyPageBorder nBorder);
  284. //-----------------------------------------------------------------------
  285. // Summary:
  286. //     Retrieves border style around client page rectangle
  287. // Returns:
  288. //     XTPPropertyPageBorder Border style.
  289. // See Also:
  290. //     XTPPropertyPageBorder, CXTPPropertySheet::SetPageBorderStyle
  291. //-----------------------------------------------------------------------
  292. XTPPropertyPageBorder GetPageBorderStyle() const;
  293. //-----------------------------------------------------------------------
  294. // Summary:
  295. //     Call this member to allow user resize property sheet
  296. // Parameters:
  297. //     bResizable - TRUE to allow user resize property sheet
  298. //-----------------------------------------------------------------------
  299. void SetResizable(BOOL bResizable = TRUE);
  300. //-----------------------------------------------------------------------
  301. // Summary:
  302. //     Call this member to set custom size for property pages
  303. // Parameters:
  304. //     szPage - New page size to be set
  305. //-----------------------------------------------------------------------
  306. void SetPageSize(CSize szPage);
  307. protected:
  308. //-----------------------------------------------------------------------
  309. // Summary:
  310. //     This method is called to create all property sheet buttons
  311. //-----------------------------------------------------------------------
  312. virtual BOOL CreateButtons();
  313. //-----------------------------------------------------------------------
  314. // Summary:
  315. //     This method is called to create property page window
  316. // Parameters:
  317. //     pPage - Page to be created
  318. //-----------------------------------------------------------------------
  319. virtual BOOL CreatePage(CXTPPropertyPage* pPage);
  320. //{{AFX_CODEJOCK_PRIVATE
  321. public:
  322. CFont* GetFont();
  323. void EndDialog(int nEndID);
  324. void RecalcLayout(LPSIZE pPageSize = NULL, BOOL bMoveWindow = FALSE);
  325. BOOL IsWizard() const;
  326. protected:
  327. void CommonConstruct(CWnd* pParentWnd, UINT iSelectPage);
  328. protected:
  329. BOOL CreateClient();
  330. void ResizeParentToFit(CSize szClient, BOOL bMoveWindow);
  331. BOOL IsPositionRelativeToWindow();
  332. void MoveButtons(AFX_SIZEPARENTPARAMS* pLayout, CSize szClient);
  333. void CreateFont();
  334. private:
  335. void PageInfoChanged(CXTPPropertyPage* pPage, BOOL bModified);
  336. BOOL OnButtonClick(UINT nButton);
  337. LRESULT SendPageNotify(CXTPPropertyPage* pPage, int code, LPARAM lParam = 0);
  338. TCHAR ToUpper(TCHAR vkTCHAR);
  339. //}}AFX_CODEJOCK_PRIVATE
  340. protected:
  341. //{{AFX_CODEJOCK_PRIVATE
  342. DECLARE_MESSAGE_MAP()
  343. //{{AFX_VIRTUAL(CXTPPropertySheet)
  344. public:
  345. virtual BOOL PreTranslateMessage(MSG* pMsg);
  346. protected:
  347. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
  348. virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
  349. virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
  350. //}}AFX_VIRTUAL
  351. //{{AFX_MSG(CXTPPropertySheet)
  352. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
  353. afx_msg void OnDestroy();
  354. virtual BOOL OnInitDialog();
  355. afx_msg LRESULT OnCommandHelp(WPARAM wParam, LPARAM lParam);
  356. afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
  357. afx_msg void OnClose();
  358. afx_msg void OnPaint();
  359. afx_msg LRESULT OnQuerySiblings(WPARAM wParam, LPARAM lParam);
  360. afx_msg void OnSize(UINT nType, int cx, int cy);
  361. afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM);
  362. //}}AFX_MSG
  363. //}}AFX_CODEJOCK_PRIVATE
  364. protected:
  365. CString m_strCaption;           // Caption of the dialog
  366. LPDLGTEMPLATE m_lpDlgTemplate;  // Dialog template
  367. CArray<CButton*, CButton*> m_arrButtons;    // Array of buttons of property sheet
  368. CXTPPropertyPageNavigator* m_pNavigator;    // Currently used navigator
  369. CFont m_fntNormal;                          // Font used to draw buttons and navigator
  370. CArray<CXTPPropertyPage*, CXTPPropertyPage*> m_arrPages;  // Array of propety pages
  371. CXTPPropertyPage* m_pActivePage;            // Pointer to active property page
  372. CRect m_rcPage;         // Bounding rectangle of active page
  373. BOOL m_bAllowApply;     // TRUE to allow enable apply button
  374. BOOL m_bModeless;       // TRUE if property sheet was created as modeless window
  375. BOOL m_bResizable;      // TRUE if dialog can be resized
  376. CSize m_szWindow;       // Last window size of property sheet
  377. CSize m_szButton;       // Button size
  378. CScrollBar m_scSizeIcon;    // Resize glyph
  379. XTPPropertyPageBorder  m_nPageBorderStyle;  // Client border style
  380. public:
  381. PROPSHEETHEADER m_psh;  // The Windows PROPSHEETHEADER structure. Provides access to basic property sheet parameters.
  382. };
  383. AFX_INLINE int CXTPPropertySheet::GetPageCount() const {
  384. return (int)m_arrPages.GetSize();
  385. }
  386. AFX_INLINE CXTPPropertyPage* CXTPPropertySheet::GetPage(int nPage) const {
  387. return nPage >= 0 && nPage < m_arrPages.GetSize() ? m_arrPages.GetAt(nPage) : NULL;
  388. }
  389. AFX_INLINE CXTPPropertyPage* CXTPPropertySheet::GetActivePage() const {
  390. return m_hWnd ? m_pActivePage : GetPage(m_psh.nStartPage);
  391. }
  392. AFX_INLINE int CXTPPropertySheet::GetActiveIndex() const {
  393. return m_hWnd ? GetPageIndex(m_pActivePage) : m_psh.nStartPage;
  394. }
  395. AFX_INLINE CXTPPropertyPageNavigator* CXTPPropertySheet::GetNavigator() const {
  396. return m_pNavigator;
  397. }
  398. AFX_INLINE CFont* CXTPPropertySheet::GetFont() {
  399. return &m_fntNormal;
  400. }
  401. AFX_INLINE CRect CXTPPropertySheet::GetPageRect() const {
  402. return m_rcPage;
  403. }
  404. AFX_INLINE XTPPropertyPageBorder CXTPPropertySheet::GetPageBorderStyle() const {
  405. return m_nPageBorderStyle;
  406. }
  407. AFX_INLINE INT_PTR CXTPPropertySheet::DoModal() {
  408. return CDialog::DoModal();
  409. }
  410. #endif // !defined(__XTPPROPERTYSHEET_H__)