ExampleDlg.cpp
上传用户:topndl
上传日期:2007-01-02
资源大小:20k
文件大小:7k
源码类别:

PropertySheet

开发平台:

Visual C++

  1. // ExampleDlg.cpp : Implementierungsdatei
  2. //
  3. #include "stdafx.h"
  4. #include "Example.h"
  5. #include "CMyProperty.h"
  6. #include "PropPage1.h"
  7. #include "PropPage2.h"
  8. #include "ExampleDlg.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14. /////////////////////////////////////////////////////////////////////////////
  15. // CAboutDlg-Dialogfeld f黵 Anwendungsbefehl "Info"
  16. class CAboutDlg : public CDialog
  17. {
  18. public:
  19. CAboutDlg();
  20. // Dialogfelddaten
  21. //{{AFX_DATA(CAboutDlg)
  22. enum { IDD = IDD_ABOUTBOX };
  23. //}}AFX_DATA
  24. // Vom Klassenassistenten generierte 躡erladungen virtueller Funktionen
  25. //{{AFX_VIRTUAL(CAboutDlg)
  26. protected:
  27. virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterst黷zung
  28. //}}AFX_VIRTUAL
  29. // Implementierung
  30. protected:
  31. //{{AFX_MSG(CAboutDlg)
  32. //}}AFX_MSG
  33. DECLARE_MESSAGE_MAP()
  34. };
  35. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  36. {
  37. //{{AFX_DATA_INIT(CAboutDlg)
  38. //}}AFX_DATA_INIT
  39. }
  40. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. //{{AFX_DATA_MAP(CAboutDlg)
  44. //}}AFX_DATA_MAP
  45. }
  46. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  47. //{{AFX_MSG_MAP(CAboutDlg)
  48. // Keine Nachrichten-Handler
  49. //}}AFX_MSG_MAP
  50. END_MESSAGE_MAP()
  51. /////////////////////////////////////////////////////////////////////////////
  52. // CExampleDlg Dialogfeld
  53. CExampleDlg::CExampleDlg(CWnd* pParent /*=NULL*/)
  54. : CDialog(CExampleDlg::IDD, pParent)
  55. {
  56. //{{AFX_DATA_INIT(CExampleDlg)
  57. // HINWEIS: Der Klassenassistent f黦t hier Member-Initialisierung ein
  58. //}}AFX_DATA_INIT
  59. // Beachten Sie, dass LoadIcon unter Win32 keinen nachfolgenden DestroyIcon-Aufruf ben鰐igt
  60. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  61. }
  62. void CExampleDlg::DoDataExchange(CDataExchange* pDX)
  63. {
  64. CDialog::DoDataExchange(pDX);
  65. //{{AFX_DATA_MAP(CExampleDlg)
  66. // HINWEIS: Der Klassenassistent f黦t an dieser Stelle DDX- und DDV-Aufrufe ein
  67. //}}AFX_DATA_MAP
  68. }
  69. BEGIN_MESSAGE_MAP(CExampleDlg, CDialog)
  70. //{{AFX_MSG_MAP(CExampleDlg)
  71. ON_WM_SYSCOMMAND()
  72. ON_WM_PAINT()
  73. ON_WM_QUERYDRAGICON()
  74. //}}AFX_MSG_MAP
  75. END_MESSAGE_MAP()
  76. /////////////////////////////////////////////////////////////////////////////
  77. // CExampleDlg 
  78. BOOL CExampleDlg::OnInitDialog()
  79. {
  80. CDialog::OnInitDialog();
  81. // IDM_ABOUTBOX 
  82. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  83. ASSERT(IDM_ABOUTBOX < 0xF000);
  84. CMenu* pSysMenu = GetSystemMenu(FALSE);
  85. if (pSysMenu != NULL)
  86. {
  87. CString strAboutMenu;
  88. strAboutMenu.LoadString(IDS_ABOUTBOX);
  89. if (!strAboutMenu.IsEmpty())
  90. {
  91. pSysMenu->AppendMenu(MF_SEPARATOR);
  92. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  93. }
  94. }
  95. SetIcon(m_hIcon, TRUE);
  96. SetIcon(m_hIcon, FALSE);
  97. // Create the CMyPropertysheet
  98. m_propertySheet.m_Rect.left = 100; // set the position on the screen
  99. m_propertySheet.m_Rect.top = 100;
  100. m_propertySheet.m_Rect.right = 500;
  101. m_propertySheet.m_Rect.bottom = 300;
  102. m_propertySheet.m_nPages = -1; // init this membervariable
  103. m_propertySheet.m_nActPage = 0; // init this membervariable
  104. m_propertySheet.m_nCtrlID = 2000; // control-id in the dialog
  105. // and create it on the screen
  106. m_propertySheet.Create (WS_VISIBLE | WS_CHILD | WS_TABSTOP,
  107. m_propertySheet.m_Rect, this, m_propertySheet.m_nCtrlID);
  108. // Now add the dialogs page per page
  109. TC_ITEM Item;
  110. Item.mask = TCIF_TEXT;
  111. CMyPropertyPage *pPropPage;
  112. int nN;
  113. int nPages = 2; // in my example I have two pages
  114.     for (nN = 0; nN < nPages; nN++) {
  115. pPropPage = new (CMyPropertyPage); // new it
  116. // Create the tab and the dialog
  117. switch (nN) {
  118. case 0: // page number 1 - a small example
  119. Item.pszText = "Page 1";
  120. pPropPage->m_strTitle = "&Page1"; // or get the title of m_fontPage - whatwever you want
  121. pPropPage->m_pDialogPage = (CMyPropDialog *) &m_propPage1;
  122. pPropPage->m_pDialogPage->Create (IDD_PROPPAGE1, &m_propertySheet);
  123. break;
  124. case 1: // page number 2 - a small example
  125. Item.pszText = "Page 2";
  126. pPropPage->m_strTitle = "&Page2"; // or get the title of m_fontPage - whatwever you want
  127. pPropPage->m_pDialogPage = (CMyPropDialog *) &m_propPage2;
  128. pPropPage->m_pDialogPage->Create (IDD_PROPPAGE2, &m_propertySheet);
  129. break;
  130. }
  131. m_propertySheet.InsertItem (nN, &Item); // this is fot CTabWnd
  132. pPropPage->m_hLocal = NULL; // nothing is created on the fly
  133. // important information on delete!
  134. // add it to the array
  135. m_propertySheet.m_Dialogs.Add (pPropPage);
  136. m_propertySheet.m_nPages++; // one more page
  137. // the size of CTabWnd is m_rect
  138. // the size of the dialog is smaller
  139. pPropPage->m_Rect.top = 30; // above there must be enough place for the tab-control
  140. pPropPage->m_Rect.left = 10; // border of 10 units is good
  141. pPropPage->m_Rect.bottom = m_propertySheet.m_Rect.bottom - m_propertySheet.m_Rect.top - 10;
  142. pPropPage->m_Rect.right = m_propertySheet.m_Rect.right - m_propertySheet.m_Rect.left - 10;
  143. // Only the 1. page should be active at startup
  144. if (nN > 0) {
  145. pPropPage->m_pDialogPage->SetWindowPos(NULL, pPropPage->m_Rect.left,
  146. pPropPage->m_Rect.top, 0, 0,
  147. SWP_HIDEWINDOW | SWP_NOSIZE); 
  148. }
  149. else {
  150. pPropPage->m_pDialogPage->SetWindowPos(NULL, pPropPage->m_Rect.left,
  151. pPropPage->m_Rect.top, 0, 0,
  152. SWP_SHOWWINDOW | SWP_NOSIZE);
  153. }
  154. // the class will handle the change of the tab-control
  155. // and synchronize activate-deactivate the dialogpages
  156. }
  157. return TRUE;  
  158. }
  159. void CExampleDlg::OnSysCommand(UINT nID, LPARAM lParam)
  160. {
  161. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  162. {
  163. CAboutDlg dlgAbout;
  164. dlgAbout.DoModal();
  165. }
  166. else
  167. {
  168. CDialog::OnSysCommand(nID, lParam);
  169. }
  170. }
  171. // Wollen Sie Ihrem Dialogfeld eine Schaltfl鋍he "Minimieren" hinzuf黦en, ben鰐igen Sie 
  172. //  den nachstehenden Code, um das Symbol zu zeichnen. F黵 MFC-Anwendungen, die das 
  173. //  Dokument/Ansicht-Modell verwenden, wird dies automatisch f黵 Sie erledigt.
  174. void CExampleDlg::OnPaint() 
  175. {
  176. if (IsIconic())
  177. {
  178. CPaintDC dc(this); // Ger鋞ekontext f黵 Zeichnen
  179. SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
  180. // Symbol in Client-Rechteck zentrieren
  181. int cxIcon = GetSystemMetrics(SM_CXICON);
  182. int cyIcon = GetSystemMetrics(SM_CYICON);
  183. CRect rect;
  184. GetClientRect(&rect);
  185. int x = (rect.Width() - cxIcon + 1) / 2;
  186. int y = (rect.Height() - cyIcon + 1) / 2;
  187. // Symbol zeichnen
  188. dc.DrawIcon(x, y, m_hIcon);
  189. }
  190. else
  191. {
  192. CDialog::OnPaint();
  193. }
  194. }
  195. // Die Systemaufrufe fragen den Cursorform ab, die angezeigt werden soll, w鋒rend der Benutzer
  196. //  das zum Symbol verkleinerte Fenster mit der Maus zieht.
  197. HCURSOR CExampleDlg::OnQueryDragIcon()
  198. {
  199. return (HCURSOR) m_hIcon;
  200. }