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

PropertySheet

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "CMyProperty.h"
  3. #ifdef _DEBUG
  4. #define new DEBUG_NEW
  5. #undef THIS_FILE
  6. static char THIS_FILE[] = __FILE__;
  7. #endif
  8. // CMyPropertySheet
  9. CMyPropertySheet::CMyPropertySheet()
  10. {
  11. }
  12. CMyPropertySheet::~CMyPropertySheet()
  13. {
  14. }
  15. BEGIN_MESSAGE_MAP(CMyPropertySheet, CTabCtrl)
  16.         //{{AFX_MSG_MAP(CMyPropertySheet)
  17.         ON_NOTIFY_REFLECT(TCN_SELCHANGE, OnSelchange)
  18.         //}}AFX_MSG_MAP
  19. END_MESSAGE_MAP()
  20. // Change the tab on the top
  21. void CMyPropertySheet::OnSelchange(NMHDR* pNMHDR, LRESULT* pResult)
  22. {
  23. SetActivePage (GetCurSel ());
  24. *pResult = 0;
  25. }
  26. ////////////////////////////////////////////////////////////////////////////
  27. // This page will be the active page
  28. int CMyPropertySheet::SetActivePage (int nPage) {
  29. CMyPropertyPage* pPropPage;
  30. int nN;
  31. if (nPage < 0 || nPage > m_nPages) nPage = 0;
  32. // get the actual page
  33. pPropPage = (CMyPropertyPage *) m_Dialogs.GetAt (m_nActPage);
  34. // deactevate it
  35. nN = pPropPage->m_pDialogPage->SetWindowPos (NULL,
  36. pPropPage->m_Rect.left, pPropPage->m_Rect.top, 0, 0, SWP_HIDEWINDOW |
  37. SWP_NOSIZE);
  38. // get the new page
  39. pPropPage = (CMyPropertyPage *) m_Dialogs.GetAt (nPage);
  40. nN = pPropPage->m_pDialogPage->SetWindowPos (NULL,
  41. pPropPage->m_Rect.left, pPropPage->m_Rect.top, 0, 0, SWP_SHOWWINDOW |
  42. SWP_NOSIZE);
  43. m_nActPage = nPage;
  44. // set the CTabCtrl-element
  45. SetCurSel(m_nActPage);
  46. return TRUE;
  47. }
  48. ////////////////////////////////////////////////////////////////////////////
  49. // Set this page as the active page
  50. int CMyPropertySheet::SetActivePage (CMyPropDialog* pPage){
  51. CMyPropertyPage* pPropPage;
  52. int nPage, nPageFound=0;
  53. for (nPage = 0; nPage <= m_nPages; nPage++) {
  54. pPropPage = (CMyPropertyPage *) m_Dialogs.GetAt (nPage);
  55. if (pPropPage->m_pDialogPage == pPage) {
  56. nPageFound = nPage;
  57. break;
  58. }
  59. }
  60. SetActivePage (nPageFound);
  61. return TRUE;
  62. }
  63. ////////////////////////////////////////////////////////////////////////////
  64. // Show the next or previous page
  65. int CMyPropertySheet::DispPage (int nCommand){
  66. int nPage;
  67. nPage = m_nActPage;
  68. if (nCommand == ID_NEXT_FIELD) 
  69. nPage++;
  70. else
  71. nPage--;
  72. // are there correct page numbers?
  73. if (nPage < 0) nPage = m_nPages;
  74. if (nPage > m_nPages) nPage = 0;
  75. SetActivePage (nPage);
  76. return TRUE;
  77. }
  78. ////////////////////////////////////////////////////////////////////////////
  79. // Get page number X
  80. CMyPropDialog* CMyPropertySheet::GetPage (int nPage){
  81. CMyPropertyPage* pPropPage;
  82. if (nPage < 0 || nPage > m_nPages) nPage = 0;
  83. pPropPage = (CMyPropertyPage *) m_Dialogs.GetAt (nPage);
  84. return pPropPage->m_pDialogPage;
  85. }
  86. ////////////////////////////////////////////////////////////////////////////
  87. // Get the active = current page
  88. CMyPropDialog* CMyPropertySheet::GetActivePage (void){
  89. CMyPropertyPage* pPropPage;
  90. pPropPage = (CMyPropertyPage *) m_Dialogs.GetAt (m_nActPage);
  91. return pPropPage->m_pDialogPage;
  92. }
  93. ////////////////////////////////////////////////////////////////////////////
  94. // Get the number of possible pages
  95. int CMyPropertySheet::GetPageCount (void) {
  96. return m_nPages;
  97. }
  98. ////////////////////////////////////////////////////////////////////////////
  99. // CMyPropDialog 
  100. CMyPropDialog::CMyPropDialog(CWnd* pParent /*=NULL*/)
  101. : CDialog()
  102. // : CDialog(CMyPropDialog::IDD, pParent)
  103. {
  104. //{{AFX_DATA_INIT(CMyPropDialog)
  105. // 
  106. //}}AFX_DATA_INIT
  107. }
  108. void CMyPropDialog::DoDataExchange(CDataExchange* pDX)
  109. {
  110. CDialog::DoDataExchange(pDX);
  111. //{{AFX_DATA_MAP(CMyPropDialog)
  112. // 
  113. //}}AFX_DATA_MAP
  114. }
  115. BEGIN_MESSAGE_MAP(CMyPropDialog, CDialog)
  116. //{{AFX_MSG_MAP(CMyPropDialog)
  117. ON_WM_CTLCOLOR()
  118. //}}AFX_MSG_MAP
  119. END_MESSAGE_MAP()
  120. ////////////////////////////////////////////////////////////////////////////
  121. // Messages for CMyPropDialog 
  122. ////////////////////////////////////////////////////////////////////////////
  123. // handle CTRL-PGUP & PGDN
  124. BOOL CMyPropDialog::PreTranslateMessage(MSG* pMsg) 
  125. {
  126. // TODO:
  127. //First Property Sheet tab key translation
  128. //Ctrl+PageUp, and Ctrl+PageDown 
  129. if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&
  130. pMsg->wParam == VK_PRIOR) {
  131. ((CMyPropertySheet *) GetParent ())->DispPage (ID_PREV_FIELD);
  132. return TRUE;
  133. }
  134. if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&
  135. pMsg->wParam == VK_NEXT) {
  136. ((CMyPropertySheet *) GetParent ())->DispPage (ID_NEXT_FIELD);
  137. return TRUE;
  138. }
  139. return CDialog::PreTranslateMessage(pMsg);
  140. }
  141. ////////////////////////////////////////////////////////////////////////////
  142. // 
  143. BOOL CMyPropDialog::OnCmdMsg(UINT nID, int nCode, void* pExtra,
  144. AFX_CMDHANDLERINFO* pHandlerInfo) 
  145. {
  146. // TODO: do nothing here
  147. return CDialog::OnCmdMsg(nID, nCode, pExtra, pHandlerInfo);
  148. }
  149. ////////////////////////////////////////////////////////////////////////////
  150. // CTabCtrl-Handling
  151. BOOL CMyPropertySheet::PreTranslateMessage(MSG* pMsg) 
  152. {
  153. // TODO:
  154. // First Property Sheet tab key translation
  155. // Ctrl+PageUp, and Ctrl+PageDown 
  156. if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&
  157. pMsg->wParam == VK_PRIOR) {
  158. DispPage (ID_PREV_FIELD);
  159. return TRUE;
  160. }
  161. if (pMsg->message == WM_KEYDOWN && GetAsyncKeyState(VK_CONTROL) < 0 &&
  162. pMsg->wParam == VK_NEXT) {
  163. DispPage (ID_NEXT_FIELD);
  164. return TRUE;
  165. }
  166. return CTabCtrl::PreTranslateMessage(pMsg);
  167. }
  168. void CMyPropertySheet::PostNcDestroy() 
  169. {
  170. // TODO: Free and unlock
  171. int nN;
  172. CMyPropertyPage* pPropPage;
  173. // pPropPages deleten
  174. for (nN = 0; nN <= m_nPages; nN++) {
  175. //  get page per page
  176. pPropPage = (CMyPropertyPage *) m_Dialogs.GetAt (0);
  177. if (pPropPage->m_hLocal) { // you created the dialog on the fly?
  178. LocalUnlock (pPropPage->m_hLocal); //pBuffer =
  179. // (BYTE*)LocalLock(pPropPage->m_hLocal);
  180. LocalFree (pPropPage->m_hLocal); // LocalAlloc(LHND, nBufferSize);
  181. }
  182. m_Dialogs.RemoveAt (0);
  183. delete (pPropPage);
  184. }
  185. CTabCtrl::PostNcDestroy();
  186. // delete (this); // free Resources
  187. // only needed if you work with NEW
  188. }
  189. void CMyPropDialog::PostNcDestroy() 
  190. {
  191. // TODO: 
  192. CDialog::PostNcDestroy();
  193. delete (this); // free it
  194. }
  195. ////////////////////////////////////////////////////////////////////////////