home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / mfc / include / afxdlgs.h < prev    next >
C/C++ Source or Header  |  1998-06-16  |  23KB  |  786 lines

  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10.  
  11. #ifndef __AFXDLGS_H__
  12. #define __AFXDLGS_H__
  13.  
  14. #ifndef __AFXWIN_H__
  15.     #include <afxwin.h>
  16. #endif
  17.  
  18. #ifndef _INC_COMMDLG
  19.     #include <commdlg.h>    // common dialog APIs
  20. #endif
  21.  
  22. // Avoid mapping GetFileTitle to GetFileTitle[A/W]
  23. #ifdef GetFileTitle
  24. #undef GetFileTitle
  25. AFX_INLINE short APIENTRY GetFileTitle(LPCTSTR lpszFile, LPTSTR lpszTitle, WORD cbBuf)
  26. #ifdef UNICODE
  27.     { return ::GetFileTitleW(lpszFile, lpszTitle, cbBuf); }
  28. #else
  29.     { return ::GetFileTitleA(lpszFile, lpszTitle, cbBuf); }
  30. #endif
  31. #endif
  32.  
  33. #ifndef _AFX_NO_RICHEDIT_SUPPORT
  34.     #ifndef _RICHEDIT_
  35.         #include <richedit.h>
  36.     #endif
  37. #endif
  38.  
  39. #ifdef _AFX_MINREBUILD
  40. #pragma component(minrebuild, off)
  41. #endif
  42. #ifndef _AFX_FULLTYPEINFO
  43. #pragma component(mintypeinfo, on)
  44. #endif
  45.  
  46. #ifndef _AFX_NOFORCE_LIBS
  47.  
  48. /////////////////////////////////////////////////////////////////////////////
  49. // Win32 libraries
  50.  
  51. #endif //!_AFX_NOFORCE_LIBS
  52.  
  53. /////////////////////////////////////////////////////////////////////////////
  54.  
  55. #ifdef _AFX_PACKING
  56. #pragma pack(push, _AFX_PACKING)
  57. #endif
  58.  
  59. /////////////////////////////////////////////////////////////////////////////
  60. // AFXDLGS - MFC Standard dialogs
  61.  
  62. // Classes declared in this file
  63.  
  64.     // CDialog
  65.         class CCommonDialog;  // implementation base class
  66.  
  67.             // modeless dialogs
  68.             class CFindReplaceDialog; // Find/FindReplace dialog
  69.  
  70.             // modal dialogs
  71.             class CFileDialog;    // FileOpen/FileSaveAs dialogs
  72.             class CColorDialog;   // Color picker dialog
  73.             class CFontDialog;    // Font chooser dialog
  74.             class CPrintDialog;   // Print/PrintSetup dialogs
  75.             class CPageSetupDialog; // Page Setup dialog
  76.  
  77.     // CWnd
  78.     class CPropertySheet;     // implements tabbed dialogs
  79.         class CPropertySheetEx;
  80.  
  81.     // CDialog
  82.         class CPropertyPage;  // Used with CPropertySheet for tabbed dialogs
  83.             class CPropertyPageEx;
  84.  
  85. /////////////////////////////////////////////////////////////////////////////
  86.  
  87. #undef AFX_DATA
  88. #define AFX_DATA AFX_CORE_DATA
  89.  
  90. /////////////////////////////////////////////////////////////////////////////
  91. // CCommonDialog - base class for all common dialogs
  92.  
  93. #ifdef _AFXDLL
  94. class CCommonDialog : public CDialog
  95. #else
  96. class AFX_NOVTABLE CCommonDialog : public CDialog
  97. #endif
  98. {
  99. public:
  100.     CCommonDialog(CWnd* pParentWnd);
  101.  
  102. // Implementation
  103. protected:
  104.     virtual void OnOK();
  105.     virtual void OnCancel();
  106.  
  107.     //{{AFX_MSG(CCommonDialog)
  108.     afx_msg BOOL OnHelpInfo(HELPINFO*);
  109.     //}}AFX_MSG
  110.     DECLARE_MESSAGE_MAP()
  111. };
  112.  
  113. /////////////////////////////////////////////////////////////////////////////
  114. // CFileDialog - used for FileOpen... or FileSaveAs...
  115.  
  116. class CFileDialog : public CCommonDialog
  117. {
  118.     DECLARE_DYNAMIC(CFileDialog)
  119.  
  120. public:
  121. // Attributes
  122.     OPENFILENAME m_ofn; // open file parameter block
  123.  
  124. // Constructors
  125.     CFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs
  126.         LPCTSTR lpszDefExt = NULL,
  127.         LPCTSTR lpszFileName = NULL,
  128.         DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
  129.         LPCTSTR lpszFilter = NULL,
  130.         CWnd* pParentWnd = NULL);
  131.  
  132. // Operations
  133.     virtual int DoModal();
  134.  
  135.     // Helpers for parsing file name after successful return
  136.     // or during Overridable callbacks if OFN_EXPLORER is set
  137.     CString GetPathName() const;  // return full path and filename
  138.     CString GetFileName() const;  // return only filename
  139.     CString GetFileExt() const;   // return only ext
  140.     CString GetFileTitle() const; // return file title
  141.     BOOL GetReadOnlyPref() const; // return TRUE if readonly checked
  142.  
  143.     // Enumerating multiple file selections
  144.     POSITION GetStartPosition() const;
  145.     CString GetNextPathName(POSITION& pos) const;
  146.  
  147.     // Helpers for custom templates
  148.     void SetTemplate(UINT nWin3ID, UINT nWin4ID);
  149.     void SetTemplate(LPCTSTR lpWin3ID, LPCTSTR lpWin4ID);
  150.  
  151.     // Other operations available while the dialog is visible
  152.     CString GetFolderPath() const; // return full path
  153.     void SetControlText(int nID, LPCSTR lpsz);
  154.     void HideControl(int nID);
  155.     void SetDefExt(LPCSTR lpsz);
  156.  
  157. // Overridable callbacks
  158. protected:
  159.     friend UINT CALLBACK _AfxCommDlgProc(HWND, UINT, WPARAM, LPARAM);
  160.     virtual UINT OnShareViolation(LPCTSTR lpszPathName);
  161.     virtual BOOL OnFileNameOK();
  162.     virtual void OnLBSelChangedNotify(UINT nIDBox, UINT iCurSel, UINT nCode);
  163.  
  164.     // only called back if OFN_EXPLORER is set
  165.     virtual void OnInitDone();
  166.     virtual void OnFileNameChange();
  167.     virtual void OnFolderChange();
  168.     virtual void OnTypeChange();
  169.  
  170. // Implementation
  171. #ifdef _DEBUG
  172. public:
  173.     virtual void Dump(CDumpContext& dc) const;
  174. #endif
  175.  
  176. protected:
  177.     BOOL m_bOpenFileDialog;       // TRUE for file open, FALSE for file save
  178.     CString m_strFilter;          // filter string
  179.                         // separate fields with '|', terminate with '||\0'
  180.     TCHAR m_szFileTitle[64];       // contains file title after return
  181.     TCHAR m_szFileName[_MAX_PATH]; // contains full path name after return
  182.  
  183.     OPENFILENAME*  m_pofnTemp;
  184.  
  185.     virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  186. };
  187.  
  188. /////////////////////////////////////////////////////////////////////////////
  189. // CFontDialog - used to select a font
  190.  
  191. class CFontDialog : public CCommonDialog
  192. {
  193.     DECLARE_DYNAMIC(CFontDialog)
  194.  
  195. public:
  196. // Attributes
  197.     // font choosing parameter block
  198.     CHOOSEFONT m_cf;
  199.  
  200. // Constructors
  201.     CFontDialog(LPLOGFONT lplfInitial = NULL,
  202.         DWORD dwFlags = CF_EFFECTS | CF_SCREENFONTS,
  203.         CDC* pdcPrinter = NULL,
  204.         CWnd* pParentWnd = NULL);
  205. #ifndef _AFX_NO_RICHEDIT_SUPPORT
  206.     CFontDialog(const CHARFORMAT& charformat,
  207.         DWORD dwFlags = CF_SCREENFONTS,
  208.         CDC* pdcPrinter = NULL,
  209.         CWnd* pParentWnd = NULL);
  210. #endif
  211. // Operations
  212.     virtual int DoModal();
  213.  
  214.     // Get the selected font (works during DoModal displayed or after)
  215.     void GetCurrentFont(LPLOGFONT lplf);
  216.  
  217.     // Helpers for parsing information after successful return
  218.     CString GetFaceName() const;  // return the face name of the font
  219.     CString GetStyleName() const; // return the style name of the font
  220.     int GetSize() const;          // return the pt size of the font
  221.     COLORREF GetColor() const;    // return the color of the font
  222.     int GetWeight() const;        // return the chosen font weight
  223.     BOOL IsStrikeOut() const;     // return TRUE if strikeout
  224.     BOOL IsUnderline() const;     // return TRUE if underline
  225.     BOOL IsBold() const;          // return TRUE if bold font
  226.     BOOL IsItalic() const;        // return TRUE if italic font
  227. #ifndef _AFX_NO_RICHEDIT_SUPPORT
  228.     void GetCharFormat(CHARFORMAT& cf) const;
  229. #endif
  230.  
  231. // Implementation
  232.     LOGFONT m_lf; // default LOGFONT to store the info
  233. #ifndef _AFX_NO_RICHEDIT_SUPPORT
  234.     DWORD FillInLogFont(const CHARFORMAT& cf);
  235. #endif
  236.  
  237. #ifdef _DEBUG
  238. public:
  239.     virtual void Dump(CDumpContext& dc) const;
  240. #endif
  241.  
  242. protected:
  243.     TCHAR m_szStyleName[64]; // contains style name after return
  244. };
  245.  
  246. /////////////////////////////////////////////////////////////////////////////
  247. // CColorDialog - used to select a color
  248.  
  249. class CColorDialog : public CCommonDialog
  250. {
  251.     DECLARE_DYNAMIC(CColorDialog)
  252.  
  253. public:
  254. // Attributes
  255.     // color chooser parameter block
  256.     CHOOSECOLOR m_cc;
  257.  
  258. // Constructors
  259.     CColorDialog(COLORREF clrInit = 0, DWORD dwFlags = 0,
  260.             CWnd* pParentWnd = NULL);
  261.  
  262. // Operations
  263.     virtual int DoModal();
  264.  
  265.     // Set the current color while dialog is displayed
  266.     void SetCurrentColor(COLORREF clr);
  267.  
  268.     // Helpers for parsing information after successful return
  269.     COLORREF GetColor() const;
  270.     static COLORREF* PASCAL GetSavedCustomColors();
  271.  
  272. // Overridable callbacks
  273. protected:
  274.     friend UINT CALLBACK _AfxCommDlgProc(HWND, UINT, WPARAM, LPARAM);
  275.     virtual BOOL OnColorOK();       // validate color
  276.  
  277. // Implementation
  278.  
  279. #ifdef _DEBUG
  280. public:
  281.     virtual void Dump(CDumpContext& dc) const;
  282. #endif
  283.  
  284. #ifndef _AFX_NO_GRAYDLG_SUPPORT
  285. protected:
  286.     //{{AFX_MSG(CColorDialog)
  287.     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
  288.     //}}AFX_MSG
  289.     DECLARE_MESSAGE_MAP()
  290. #endif //!_AFX_NO_GRAYDLG_SUPPORT
  291. };
  292.  
  293. // for backward compatibility clrSavedCustom is defined as GetSavedCustomColors
  294. #define clrSavedCustom GetSavedCustomColors()
  295.  
  296. /////////////////////////////////////////////////////////////////////////////
  297. // Page Setup dialog
  298.  
  299. class CPageSetupDialog : public CCommonDialog
  300. {
  301.     DECLARE_DYNAMIC(CPageSetupDialog)
  302.  
  303. public:
  304. // Attributes
  305.     PAGESETUPDLG m_psd;
  306.  
  307. // Constructors
  308.     CPageSetupDialog(DWORD dwFlags = PSD_MARGINS | PSD_INWININIINTLMEASURE,
  309.         CWnd* pParentWnd = NULL);
  310.  
  311. // Attributes
  312.     LPDEVMODE GetDevMode() const;   // return DEVMODE
  313.     CString GetDriverName() const;  // return driver name
  314.     CString GetDeviceName() const;  // return device name
  315.     CString GetPortName() const;    // return output port name
  316.     HDC CreatePrinterDC();
  317.     CSize GetPaperSize() const;
  318.     void GetMargins(LPRECT lpRectMargins, LPRECT lpRectMinMargins) const;
  319.  
  320. // Operations
  321.     virtual int DoModal();
  322.  
  323. // Overridables
  324.     virtual UINT PreDrawPage(WORD wPaper, WORD wFlags, LPPAGESETUPDLG pPSD);
  325.     virtual UINT OnDrawPage(CDC* pDC, UINT nMessage, LPRECT lpRect);
  326.  
  327. // Implementation
  328. protected:
  329.     static UINT CALLBACK PaintHookProc(HWND hWnd, UINT message, WPARAM wParam,
  330.         LPARAM lParam);
  331.  
  332. #ifdef _DEBUG
  333. public:
  334.     virtual void Dump(CDumpContext& dc) const;
  335. #endif
  336. };
  337.  
  338. /////////////////////////////////////////////////////////////////////////////
  339. // CPrintDialog - used for Print... and PrintSetup...
  340.  
  341. class CPrintDialog : public CCommonDialog
  342. {
  343.     DECLARE_DYNAMIC(CPrintDialog)
  344.  
  345. public:
  346. // Attributes
  347.     // print dialog parameter block (note this is a reference)
  348.     PRINTDLG& m_pd;
  349.  
  350. // Constructors
  351.     CPrintDialog(BOOL bPrintSetupOnly,
  352.         // TRUE for Print Setup, FALSE for Print Dialog
  353.         DWORD dwFlags = PD_ALLPAGES | PD_USEDEVMODECOPIES | PD_NOPAGENUMS
  354.             | PD_HIDEPRINTTOFILE | PD_NOSELECTION,
  355.         CWnd* pParentWnd = NULL);
  356.  
  357. // Operations
  358.     virtual int DoModal();
  359.  
  360.     // GetDefaults will not display a dialog but will get
  361.     // device defaults
  362.     BOOL GetDefaults();
  363.  
  364.     // Helpers for parsing information after successful return
  365.     int GetCopies() const;          // num. copies requested
  366.     BOOL PrintCollate() const;      // TRUE if collate checked
  367.     BOOL PrintSelection() const;    // TRUE if printing selection
  368.     BOOL PrintAll() const;          // TRUE if printing all pages
  369.     BOOL PrintRange() const;        // TRUE if printing page range
  370.     int GetFromPage() const;        // starting page if valid
  371.     int GetToPage() const;          // starting page if valid
  372.     LPDEVMODE GetDevMode() const;   // return DEVMODE
  373.     CString GetDriverName() const;  // return driver name
  374.     CString GetDeviceName() const;  // return device name
  375.     CString GetPortName() const;    // return output port name
  376.     HDC GetPrinterDC() const;       // return HDC (caller must delete)
  377.  
  378.     // This helper creates a DC based on the DEVNAMES and DEVMODE structures.
  379.     // This DC is returned, but also stored in m_pd.hDC as though it had been
  380.     // returned by CommDlg.  It is assumed that any previously obtained DC
  381.     // has been/will be deleted by the user.  This may be
  382.     // used without ever invoking the print/print setup dialogs.
  383.  
  384.     HDC CreatePrinterDC();
  385.  
  386. // Implementation
  387.  
  388. #ifdef _DEBUG
  389. public:
  390.     virtual void Dump(CDumpContext& dc) const;
  391. #endif
  392.  
  393. private:
  394.     PRINTDLG m_pdActual; // the Print/Print Setup need to share this
  395. protected:
  396.     // The following handle the case of print setup... from the print dialog
  397.     CPrintDialog(PRINTDLG& pdInit);
  398.     virtual CPrintDialog* AttachOnSetup();
  399.  
  400.     //{{AFX_MSG(CPrintDialog)
  401.     afx_msg void OnPrintSetup();
  402.     //}}AFX_MSG
  403.     DECLARE_MESSAGE_MAP()
  404. };
  405.  
  406. /////////////////////////////////////////////////////////////////////////////
  407. // Find/FindReplace modeless dialogs
  408.  
  409. class CFindReplaceDialog : public CCommonDialog
  410. {
  411.     DECLARE_DYNAMIC(CFindReplaceDialog)
  412.  
  413. public:
  414. // Attributes
  415.     FINDREPLACE m_fr;
  416.  
  417. // Constructors
  418.     CFindReplaceDialog();
  419.     // Note: you must allocate these on the heap.
  420.     //  If you do not, you must derive and override PostNcDestroy()
  421.  
  422.     BOOL Create(BOOL bFindDialogOnly, // TRUE for Find, FALSE for FindReplace
  423.             LPCTSTR lpszFindWhat,
  424.             LPCTSTR lpszReplaceWith = NULL,
  425.             DWORD dwFlags = FR_DOWN,
  426.             CWnd* pParentWnd = NULL);
  427.  
  428.     // find/replace parameter block
  429.     static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);
  430.  
  431. // Operations
  432.     // Helpers for parsing information after successful return
  433.     CString GetReplaceString() const;// get replacement string
  434.     CString GetFindString() const;   // get find string
  435.     BOOL SearchDown() const;         // TRUE if search down, FALSE is up
  436.     BOOL FindNext() const;           // TRUE if command is find next
  437.     BOOL MatchCase() const;          // TRUE if matching case
  438.     BOOL MatchWholeWord() const;     // TRUE if matching whole words only
  439.     BOOL ReplaceCurrent() const;     // TRUE if replacing current string
  440.     BOOL ReplaceAll() const;         // TRUE if replacing all occurrences
  441.     BOOL IsTerminating() const;      // TRUE if terminating dialog
  442.  
  443. // Implementation
  444. protected:
  445.     virtual void PostNcDestroy();
  446.  
  447. #ifdef _DEBUG
  448. public:
  449.     virtual void Dump(CDumpContext& dc) const;
  450. #endif
  451.  
  452. protected:
  453.     TCHAR m_szFindWhat[128];
  454.     TCHAR m_szReplaceWith[128];
  455. };
  456.  
  457. ////////////////////////////////////////////////////////////////////////////
  458. // CPropertyPage -- one page of a tabbed dialog
  459.  
  460. // MFC needs to use the original Win95 version of the PROPSHEETPAGE structure.
  461.  
  462. typedef struct _AFX_OLDPROPSHEETPAGE {
  463.         DWORD           dwSize;
  464.         DWORD           dwFlags;
  465.         HINSTANCE       hInstance;
  466.         union {
  467.             LPCTSTR          pszTemplate;
  468. #ifdef _WIN32
  469.             LPCDLGTEMPLATE  pResource;
  470. #else
  471.             const VOID FAR *pResource;
  472. #endif
  473.         } DUMMYUNIONNAME;
  474.         union {
  475.             HICON       hIcon;
  476.             LPCSTR      pszIcon;
  477.         } DUMMYUNIONNAME2;
  478.         LPCTSTR          pszTitle;
  479.         DLGPROC         pfnDlgProc;
  480.         LPARAM          lParam;
  481.         LPFNPSPCALLBACK pfnCallback;
  482.         UINT FAR * pcRefParent;
  483. } AFX_OLDPROPSHEETPAGE;
  484.  
  485. // same goes for PROPSHEETHEADER
  486.  
  487. typedef struct _AFX_OLDPROPSHEETHEADER {
  488.         DWORD           dwSize;
  489.         DWORD           dwFlags;
  490.         HWND            hwndParent;
  491.         HINSTANCE       hInstance;
  492.         union {
  493.             HICON       hIcon;
  494.             LPCTSTR     pszIcon;
  495.         }DUMMYUNIONNAME;
  496.         LPCTSTR         pszCaption;
  497.  
  498.         UINT            nPages;
  499.         union {
  500.             UINT        nStartPage;
  501.             LPCTSTR     pStartPage;
  502.         }DUMMYUNIONNAME2;
  503.         union {
  504.             LPCPROPSHEETPAGE ppsp;
  505.             HPROPSHEETPAGE FAR *phpage;
  506.         }DUMMYUNIONNAME3;
  507.         PFNPROPSHEETCALLBACK pfnCallback;
  508. } AFX_OLDPROPSHEETHEADER;
  509.  
  510. class CPropertyPage : public CDialog
  511. {
  512.     DECLARE_DYNAMIC(CPropertyPage)
  513.  
  514. // Construction
  515. public:
  516.     CPropertyPage();
  517.     CPropertyPage(UINT nIDTemplate, UINT nIDCaption = 0);
  518.     CPropertyPage(LPCTSTR lpszTemplateName, UINT nIDCaption = 0);
  519.     void Construct(UINT nIDTemplate, UINT nIDCaption = 0);
  520.     void Construct(LPCTSTR lpszTemplateName, UINT nIDCaption = 0);
  521.  
  522. // Attributes
  523.     AFX_OLDPROPSHEETPAGE   m_psp;
  524.  
  525. // Operations
  526.     void CancelToClose();
  527.     void SetModified(BOOL bChanged = TRUE);
  528.     LRESULT QuerySiblings(WPARAM wParam, LPARAM lParam);
  529.  
  530. // Overridables
  531. public:
  532.     virtual BOOL OnApply();
  533.     virtual void OnReset();
  534.     virtual void OnOK();
  535.     virtual void OnCancel();
  536.     virtual BOOL OnSetActive();
  537.     virtual BOOL OnKillActive();
  538.     virtual BOOL OnQueryCancel();
  539.  
  540.     virtual LRESULT OnWizardBack();
  541.     virtual LRESULT OnWizardNext();
  542.     virtual BOOL OnWizardFinish();
  543.  
  544. // Implementation
  545. public:
  546.     virtual ~CPropertyPage();
  547. #ifdef _DEBUG
  548.     virtual void AssertValid() const;
  549.     virtual void Dump(CDumpContext& dc) const;
  550. #endif
  551.     void EndDialog(int nEndID); // called for error scenarios
  552.  
  553. protected:
  554.     // private implementation data
  555.     CString m_strCaption;
  556.     BOOL m_bFirstSetActive;
  557.  
  558.     // implementation helpers
  559.     void CommonConstruct(LPCTSTR lpszTemplateName, UINT nIDCaption);
  560.     virtual BOOL OnNotify(WPARAM wParam, LPARAM lParam, LRESULT* pResult);
  561.     virtual BOOL PreTranslateMessage(MSG*);
  562.     LRESULT MapWizardResult(LRESULT lToMap);
  563.     BOOL IsButtonEnabled(int iButton);
  564.  
  565.     void PreProcessPageTemplate(PROPSHEETPAGE& psp, BOOL bWizard);
  566. #ifndef _AFX_NO_OCC_SUPPORT
  567.     void Cleanup();
  568.     const DLGTEMPLATE* InitDialogInfo(const DLGTEMPLATE* pTemplate);
  569. #endif
  570.  
  571.     // Generated message map functions
  572.     //{{AFX_MSG(CPropertyPage)
  573.     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
  574.     //}}AFX_MSG
  575.     DECLARE_MESSAGE_MAP()
  576.  
  577.     friend class CPropertySheet;
  578.     friend class CPropertySheetEx;
  579. };
  580.  
  581. class CPropertyPageEx : public CPropertyPage
  582. {
  583.     DECLARE_DYNAMIC(CPropertyPageEx)
  584.  
  585. // Construction
  586. public:
  587.     CPropertyPageEx();
  588.     CPropertyPageEx(UINT nIDTemplate, UINT nIDCaption = 0,
  589.         UINT nIDHeaderTitle = 0, UINT nIDHeaderSubTitle = 0);
  590.     CPropertyPageEx(LPCTSTR lpszTemplateName, UINT nIDCaption = 0,
  591.         UINT nIDHeaderTitle = 0, UINT nIDHeaderSubTitle = 0);
  592.     void Construct(UINT nIDTemplate, UINT nIDCaption = 0,
  593.         UINT nIDHeaderTitle = 0, UINT nIDHeaderSubTitle = 0);
  594.     void Construct(LPCTSTR lpszTemplateName, UINT nIDCaption = 0,
  595.         UINT nIDHeaderTitle = 0, UINT nIDHeaderSubTitle = 0);
  596.  
  597. // Implementation
  598. public:
  599. #ifdef _DEBUG
  600.     virtual void AssertValid() const;
  601.     virtual void Dump(CDumpContext& dc) const;
  602. #endif
  603.  
  604. protected:
  605.     // private implementation data
  606.     CString m_strHeaderTitle;    // this is displayed in the header
  607.     CString m_strHeaderSubTitle; //
  608.  
  609.     // implementation helpers
  610.     void CommonConstruct(LPCTSTR lpszTemplateName, UINT nIDCaption,
  611.         UINT nIDHeaderTitle, UINT nIDHeaderSubTitle);
  612.  
  613.     friend class CPropertySheet;
  614.     friend class CPropertySheetEx;
  615. };
  616.  
  617. ////////////////////////////////////////////////////////////////////////////
  618. // CPropertySheet -- a tabbed "dialog" (really a popup-window)
  619.  
  620. class CTabCtrl; // forward reference (see afxcmn.h)
  621.  
  622. class CPropertySheet : public CWnd
  623. {
  624.     DECLARE_DYNAMIC(CPropertySheet)
  625.  
  626. // Construction
  627. public:
  628.     CPropertySheet();
  629.     CPropertySheet(UINT nIDCaption, CWnd* pParentWnd = NULL,
  630.         UINT iSelectPage = 0);
  631.     CPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL,
  632.         UINT iSelectPage = 0);
  633.     void Construct(UINT nIDCaption, CWnd* pParentWnd = NULL,
  634.         UINT iSelectPage = 0);
  635.     void Construct(LPCTSTR pszCaption, CWnd* pParentWnd = NULL,
  636.         UINT iSelectPage = 0);
  637.  
  638.     // for modeless creation
  639.     BOOL Create(CWnd* pParentWnd = NULL, DWORD dwStyle = (DWORD)-1,
  640.         DWORD dwExStyle = 0);
  641.     // the default style, expressed by passing -1 as dwStyle, is actually:
  642.     // WS_SYSMENU | WS_POPUP | WS_CAPTION | DS_MODALFRAME | DS_CONTEXT_HELP | WS_VISIBLE
  643.  
  644. // Attributes
  645. public:
  646.     AFX_OLDPROPSHEETHEADER m_psh;
  647.  
  648.     int GetPageCount() const;
  649.     CPropertyPage* GetActivePage() const;
  650.     int GetActiveIndex() const;
  651.     CPropertyPage* GetPage(int nPage) const;
  652.     int GetPageIndex(CPropertyPage* pPage);
  653.     BOOL SetActivePage(int nPage);
  654.     BOOL SetActivePage(CPropertyPage* pPage);
  655.     void SetTitle(LPCTSTR lpszText, UINT nStyle = 0);
  656.     CTabCtrl* GetTabControl() const;
  657.  
  658.     void SetWizardMode();
  659.     void SetFinishText(LPCTSTR lpszText);
  660.     void SetWizardButtons(DWORD dwFlags);
  661.  
  662.     void EnableStackedTabs(BOOL bStacked);
  663.  
  664. // Operations
  665. public:
  666.     virtual int DoModal();
  667.     void AddPage(CPropertyPage* pPage);
  668.     void RemovePage(CPropertyPage* pPage);
  669.     void RemovePage(int nPage);
  670.     void EndDialog(int nEndID); // used to terminate a modal dialog
  671.     BOOL PressButton(int nButton);
  672.  
  673. // Implementation
  674. public:
  675.     virtual ~CPropertySheet();
  676. #ifdef _DEBUG
  677.     virtual void AssertValid() const;
  678.     virtual void Dump(CDumpContext& dc) const;
  679. #endif
  680.     void CommonConstruct(CWnd* pParentWnd, UINT iSelectPage);
  681.     virtual BOOL PreTranslateMessage(MSG* pMsg);
  682.     virtual void BuildPropPageArray();
  683.     virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);
  684.     virtual BOOL OnInitDialog();
  685.     virtual BOOL ContinueModal();
  686.     virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra,
  687.         AFX_CMDHANDLERINFO* pHandlerInfo);
  688.     AFX_OLDPROPSHEETHEADER* GetPropSheetHeader();   // should be virtual, but can't break binary compat yet
  689.     BOOL IsWizard() const;
  690.  
  691. protected:
  692.     CPtrArray m_pages;      // array of CPropertyPage pointers
  693.     CString m_strCaption;   // caption of the pseudo-dialog
  694.     CWnd* m_pParentWnd;     // parent window of property sheet
  695.     BOOL m_bStacked;        // EnableStackedTabs sets this
  696.     BOOL m_bModeless;       // TRUE when Create called instead of DoModal
  697.  
  698.     // Generated message map functions
  699.     //{{AFX_MSG(CPropertySheet)
  700.     afx_msg BOOL OnNcCreate(LPCREATESTRUCT);
  701.     afx_msg LRESULT HandleInitDialog(WPARAM, LPARAM);
  702.     afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor);
  703.     afx_msg LRESULT OnCommandHelp(WPARAM, LPARAM);
  704.     afx_msg void OnClose();
  705.     afx_msg void OnSysCommand(UINT nID, LPARAM);
  706.     afx_msg LRESULT OnSetDefID(WPARAM, LPARAM);
  707.     //}}AFX_MSG
  708.     DECLARE_MESSAGE_MAP()
  709.  
  710.     friend class CPropertyPage;
  711. };
  712.  
  713. ////////////////////////////////////////////////////////////////////////////
  714. // CPropertySheetEx -- a tabbed "dialog" (really a popup-window), extended
  715. //                     for IE4
  716.  
  717. class CPropertySheetEx : public CPropertySheet
  718. {
  719.     DECLARE_DYNAMIC(CPropertySheetEx)
  720.  
  721. // Construction
  722. public:
  723.     CPropertySheetEx();
  724.     CPropertySheetEx(UINT nIDCaption, CWnd* pParentWnd = NULL,
  725.         UINT iSelectPage = 0, HBITMAP hbmWatermark = NULL,
  726.         HPALETTE hpalWatermark = NULL, HBITMAP hbmHeader = NULL);
  727.     CPropertySheetEx(LPCTSTR pszCaption, CWnd* pParentWnd = NULL,
  728.         UINT iSelectPage = 0, HBITMAP hbmWatermark = NULL,
  729.         HPALETTE hpalWatermark = NULL, HBITMAP hbmHeader = NULL);
  730.     void Construct(UINT nIDCaption, CWnd* pParentWnd = NULL,
  731.         UINT iSelectPage = 0, HBITMAP hbmWatermark = NULL,
  732.         HPALETTE hpalWatermark = NULL, HBITMAP hbmHeader = NULL);
  733.     void Construct(LPCTSTR pszCaption, CWnd* pParentWnd = NULL,
  734.         UINT iSelectPage = 0, HBITMAP hbmWatermark = NULL,
  735.         HPALETTE hpalWatermark = NULL, HBITMAP hbmHeader = NULL);
  736.  
  737. // Attributes
  738. public:
  739.     PROPSHEETHEADER m_psh;
  740.  
  741. // Operations
  742. public:
  743.     void AddPage(CPropertyPageEx* pPage);
  744.  
  745. // Implementation
  746. public:
  747.     virtual ~CPropertySheetEx();
  748. #ifdef _DEBUG
  749.     virtual void AssertValid() const;
  750.     virtual void Dump(CDumpContext& dc) const;
  751. #endif
  752.     void CommonConstruct(CWnd* pParentWnd, UINT iSelectPage,
  753.         HBITMAP hbmWatermark, HPALETTE hpalWatermark, HBITMAP hbmHeader);
  754.     virtual void BuildPropPageArray();
  755.     void SetWizardMode();
  756.  
  757.     friend class CPropertyPage;
  758.     friend class CPropertyPageEx;
  759. };
  760.  
  761. /////////////////////////////////////////////////////////////////////////////
  762. // Inline function declarations
  763.  
  764. #ifdef _AFX_PACKING
  765. #pragma pack(pop)
  766. #endif
  767.  
  768. #ifdef _AFX_ENABLE_INLINES
  769. #define _AFXDLGS_INLINE AFX_INLINE
  770. #include <afxdlgs.inl>
  771. #endif
  772.  
  773. #undef AFX_DATA
  774. #define AFX_DATA
  775.  
  776. #ifdef _AFX_MINREBUILD
  777. #pragma component(minrebuild, on)
  778. #endif
  779. #ifndef _AFX_FULLTYPEINFO
  780. #pragma component(mintypeinfo, off)
  781. #endif
  782.  
  783. #endif //__AFXDLGS_H__
  784.  
  785. /////////////////////////////////////////////////////////////////////////////
  786.