TabDataSheet.cpp
上传用户:hjw22cn
上传日期:2007-01-11
资源大小:192k
文件大小:7k
源码类别:

Tab控件

开发平台:

Visual C++

  1. // TabDataSheet.cpp : implementation file
  2. //
  3. // this is the property sheet class. It manages the tabs, and shuttles messages 
  4. // between the tabs and the main dialog box.
  5. #include "stdafx.h"
  6. #include "Constants.h"
  7. #include "SheetInDlg.h"
  8. #include "FlowPage.h"
  9. #include "TabDataSheet.h"
  10. #define _NO_DATABASE
  11. #ifdef _DEBUG
  12. #define new DEBUG_NEW
  13. #undef THIS_FILE
  14. static char THIS_FILE[] = __FILE__;
  15. #endif
  16. /////////////////////////////////////////////////////////////////////////////
  17. // CTabDataSheet
  18. IMPLEMENT_DYNAMIC(CTabDataSheet, CPropertySheet)
  19. //-----------------------------------------------------------------------------/
  20. // NAME: CTabDataSheet::CTabDataSheet()
  21. //
  22. // PURPOSE: Constructor
  23. //
  24. // PARAMETERS: None
  25. //
  26. // RETURNS: None
  27. //-----------------------------------------------------------------------------/
  28. CTabDataSheet::CTabDataSheet(UINT nParentID, CWnd* pParentWnd, UINT iSelectPage)
  29. :CPropertySheet("Main Data Dialog", pParentWnd, iSelectPage)
  30. {
  31. TRACE("CTabDataSheet::CTabDataSheet()n");
  32. EnableStackedTabs(FALSE);
  33. m_pParent    = pParentWnd;
  34. m_nParentID  = nParentID;
  35. m_nLastError = 0;
  36. AddPage(&m_FlowPage1);
  37. AddPage(&m_FlowPage2);
  38. AddPage(&m_FlowPage3);
  39. AddPage(&m_FlowPage4);
  40. //AddPage(&m_HtmlPage);
  41. SetActivePage(0);
  42. }
  43. //-----------------------------------------------------------------------------/
  44. // NAME: CTabDataSheet::~CTabDataSheet()
  45. //
  46. // PURPOSE: Destructor
  47. //
  48. // PARAMETERS: None
  49. //
  50. // RETURNS: None
  51. //-----------------------------------------------------------------------------/
  52. CTabDataSheet::~CTabDataSheet()
  53. {
  54. TRACE("CTabDataSheet::CTabDataSheet()n");
  55. for (int i = m_nPageCount - 1; i >= 0; i--)
  56. {
  57. RemovePage(i);
  58. }
  59. }
  60. BEGIN_MESSAGE_MAP(CTabDataSheet, CPropertySheet)
  61. //{{AFX_MSG_MAP(CTabDataSheet)
  62. //}}AFX_MSG_MAP
  63. ON_MESSAGE(UWM_CHANGEPAGE,         OnChangePage)
  64. ON_MESSAGE(UWM_SHOWHIDEPAGE,       OnShowHideTab)
  65. ON_MESSAGE(UWM_REFLECTMSGTOPAGE,   OnReflectMsgToPage)
  66. ON_MESSAGE(UWM_SHUTDOWN,           OnShutdown)
  67. END_MESSAGE_MAP()
  68. //-----------------------------------------------------------------------------/
  69. // NAME: CTabDataSheet::OnChangePage()
  70. //
  71. // PURPOSE: Changes the currently selected page set
  72. //
  73. // PARAMETERS: WPARAM wParam Not used.
  74. // LPARAM lParam Low-order byte specifies the page to be 
  75. // displayed.
  76. //
  77. // RETURNS: LRESULT Always 1L.
  78. //-----------------------------------------------------------------------------/
  79. LRESULT CTabDataSheet::OnChangePage(WPARAM wParam, LPARAM lParam) 
  80. {
  81. TRACE("CTabDataSheet::OnChangePage()n");
  82. wParam;
  83. lParam;
  84. return 1L;
  85. }
  86. //-----------------------------------------------------------------------------/
  87. // NAME: CTabDataSheet::OnReflectMsgToPage()
  88. //
  89. // PURPOSE: Reflects a message from the parent dialog to the currently 
  90. // displayed/focused tab (almost always a button press message).
  91. //
  92. // PARAMETERS: WPARAM wParam Additional information defined by you (a 
  93. // pointer to a struct or object, etc).  Not used 
  94. // by ASM.
  95. // LPARAM lParam Specifies the message ID.
  96. //
  97. // RETURNS: LRESULT Always 1L.
  98. //
  99. // NOTES: When I originally wrote this code, I was passing the message to 
  100. // be reflected as well as the page the message to which the page 
  101. // was to be reflected.  In this particular program, I don't need 
  102. // to know the page ID, so the hi-word is not used in that manner.
  103. //-----------------------------------------------------------------------------/
  104. LRESULT CTabDataSheet::OnReflectMsgToPage(WPARAM wParam, LPARAM lParam) 
  105. {
  106. TRACE("CTabDataSheet::OnChangePage()n");
  107. UINT msgID  = (UINT)lParam;
  108. // do page specific stuff here
  109. int nPageNo = GetActiveIndex();
  110. if (nPageNo > 0)
  111. {
  112. // CFlowPage* pActivePage = (CStatusPage*)GetPage(nPageNo);
  113. // pActivePage->SendMessage(msgID, wParam, 0);
  114. }
  115. return 1L;
  116. }
  117. //-----------------------------------------------------------------------------/
  118. // NAME: CTabDataSheet::OnReflectMsgToPage()
  119. //
  120. // PURPOSE: Reflects a message from a tab to the parent dialog.  
  121. //
  122. // PARAMETERS: WPARAM wParam Lo-order word dictates the processing order of 
  123. // the message just in case we need to do something 
  124. // before passing the message on to the parent 
  125. // dialog.
  126. // LPARAM lParam Low-order word specifies the message ID.
  127. // Hi-order word specifies page message is sent 
  128. // from.
  129. //
  130. // RETURNS: LRESULT Always 1L.
  131. //-----------------------------------------------------------------------------/
  132. LRESULT CTabDataSheet::OnReflectMsgToDialog(WPARAM wParam, LPARAM lParam) 
  133. {
  134. TRACE("CTabDataSheet::OnChangePage()n");
  135. BOOL nProcessOrder = LOWORD(wParam);
  136. // wParam (low-order word) must be one of these two values
  137. ASSERT(nProcessOrder == PROC_AFTERREFLECTING || 
  138.    nProcessOrder == PROC_BEFOREREFLECTING);
  139. UINT nMsgID  = LOWORD(lParam);
  140. UINT nPageID = HIWORD(lParam);
  141. if (nProcessOrder == PROC_AFTERREFLECTING)
  142. {
  143. m_pParent->SendMessage(nMsgID, 0, MAKELPARAM(nPageID, 0));
  144. }
  145. // do page-specific stuff here
  146. if (nProcessOrder == PROC_BEFOREREFLECTING)
  147. {
  148. m_pParent->SendMessage(nMsgID, 0, MAKELPARAM(nPageID, 0));
  149. }
  150. return 1L;
  151. }
  152. //-----------------------------------------------------------------------------/
  153. // NAME: CTabDataSheet::SetTabItemInfo()
  154. //
  155. // PURPOSE: Sets tab info 
  156. //
  157. // PARAMETERS: int nCurrentPage The currently selected data page item
  158. // void* pItem Pointer to the data type (passed as a 
  159. // void* so that we can maintain the 
  160. // generic quality of this function).
  161. //
  162. // RETURNS: None.
  163. //
  164. //  NOTES: Not used in this program.
  165. //-----------------------------------------------------------------------------/
  166. void CTabDataSheet::SetTabItemInfo(int nPageID, void* pItem)
  167. {
  168. // do page-specific stuff here
  169. // the next two lines of code eliminate warnings generated by the compiler 
  170. // when set to Level 4, so delete the them if you use the parameters
  171. nPageID;
  172. pItem;
  173. }
  174. //-----------------------------------------------------------------------------/
  175. // NAME: CTabDataSheet::OnShowHideTab
  176. //
  177. // PURPOSE:
  178. //
  179. // PARAMETERS: WPARAM wParam Not used
  180. // LPARAM lParam Low-order word == 0,  hide the tab
  181. // Low-order word == 1,  show the tab
  182. // Hi-order  word = page to be hidden/shown
  183. //
  184. // RETURNS: LRESULT Always 1L
  185. //
  186. // NOTES: Not used in this program.
  187. //-----------------------------------------------------------------------------/
  188. LRESULT CTabDataSheet::OnShowHideTab(WPARAM wParam, LPARAM lParam) 
  189. {
  190. wParam;
  191. lParam;
  192. //BOOL bShow = (LOWORD(lParam) == 1);
  193. //UINT nPageID = HIWORD(lParam);
  194. /*
  195. switch (nPageID)
  196. {
  197. case  : 
  198. m_Page.ShowWindow(bShow);
  199. break;
  200. }
  201. */
  202. return 1L;
  203. }
  204. //-----------------------------------------------------------------------------/
  205. // NAME: CTabDataSheet::OnShutdown()
  206. //
  207. // PURPOSE: Tell all the pages that the dialog box is shutting down.
  208. //
  209. // PARAMETERS: None.
  210. //
  211. // RETURNS: None.
  212. //
  213. // NOTES: Not used in this program.
  214. //-----------------------------------------------------------------------------/
  215. LRESULT CTabDataSheet::OnShutdown(WPARAM wParam, LPARAM lParam) 
  216. {
  217. wParam;
  218. lParam;
  219. for (int i = -1; i < m_nPageCount; i++)
  220. {
  221. /*
  222. CFlowPage* pPage = (CFlowPage*)m_tpaPages.GetAt(i);
  223. if (pPage)
  224. {
  225. // this won't work with the tabs created the way they are right now
  226. //m_tpaPages.GetAt(i)->SendMessage(UWM_SHUTDOWN);
  227. }
  228. */
  229. }
  230. return 1L;
  231. }