XFloorWndPpg.cpp
上传用户:zhout2004
上传日期:2007-01-02
资源大小:218k
文件大小:8k
源码类别:

ActiveX/DCOM/ATL

开发平台:

Visual C++

  1. /************************************
  2.   REVISION LOG ENTRY
  3.   Revision By: Mihai Filimon
  4.   Revised on 10/10/98 1:39:58 PM
  5.   Comments: XFloorWndPpg.cpp : Implementation of the CXFloorWndPropPage property page class.
  6.  ************************************/
  7. #include "stdafx.h"
  8. #include "XFloorWnd.h"
  9. #include "XFloorWndPpg.h"
  10. #include "FloorPageObject.h"
  11. #include <atlconv.h>
  12. #include <afxconv.h>
  13. #ifdef _DEBUG
  14. #define new DEBUG_NEW
  15. #undef THIS_FILE
  16. static char THIS_FILE[] = __FILE__;
  17. #endif
  18. IMPLEMENT_DYNCREATE(CXFloorWndPropPage, COlePropertyPage)
  19. /////////////////////////////////////////////////////////////////////////////
  20. // Message map
  21. BEGIN_MESSAGE_MAP(CXFloorWndPropPage, COlePropertyPage)
  22. //{{AFX_MSG_MAP(CXFloorWndPropPage)
  23. ON_BN_CLICKED(IDC_CHECK_ANIMATION, OnCheckAnimation)
  24. ON_WM_HSCROLL()
  25. ON_BN_CLICKED(IDC_CHECK_SIGN, OnCheckSign)
  26. //}}AFX_MSG_MAP
  27. END_MESSAGE_MAP()
  28. /////////////////////////////////////////////////////////////////////////////
  29. // Initialize class factory and guid
  30. IMPLEMENT_OLECREATE_EX(CXFloorWndPropPage, "XFLOORWND.XFloorWndPropPage.1",
  31. 0x24ffd1ee, 0x5ea9, 0x11d2, 0x86, 0xb1, 0, 0x40, 0x5, 0x5c, 0x8, 0xd9)
  32. /////////////////////////////////////////////////////////////////////////////
  33. // CXFloorWndPropPage::CXFloorWndPropPageFactory::UpdateRegistry -
  34. // Adds or removes system registry entries for CXFloorWndPropPage
  35. // Function name : CXFloorWndPropPage::CXFloorWndPropPageFactory::UpdateRegistry
  36. // Description     : 
  37. // Return type : BOOL 
  38. // Argument         : BOOL bRegister
  39. BOOL CXFloorWndPropPage::CXFloorWndPropPageFactory::UpdateRegistry(BOOL bRegister)
  40. {
  41. if (bRegister)
  42. return AfxOleRegisterPropertyPageClass(AfxGetInstanceHandle(),
  43. m_clsid, IDS_XFLOORWND_PPG);
  44. else
  45. return AfxOleUnregisterClass(m_clsid, NULL);
  46. }
  47. /////////////////////////////////////////////////////////////////////////////
  48. // CXFloorWndPropPage::CXFloorWndPropPage - Constructor
  49. CXFloorWndPropPage::CXFloorWndPropPage() :
  50. COlePropertyPage(IDD, IDS_XFLOORWND_PPG_CAPTION)
  51. {
  52. //{{AFX_DATA_INIT(CXFloorWndPropPage)
  53. m_bAnimation = FALSE;
  54. m_bSign = FALSE;
  55. m_bAsPage = FALSE;
  56. //}}AFX_DATA_INIT
  57. m_nSleep = 0;
  58. }
  59. /////////////////////////////////////////////////////////////////////////////
  60. // CXFloorWndPropPage::DoDataExchange - Moves data between page and properties
  61. // Function name : CXFloorWndPropPage::DoDataExchange
  62. // Description     : Save data throw OLE controls
  63. // Return type : void 
  64. // Argument         : CDataExchange* pDX
  65. void CXFloorWndPropPage::DoDataExchange(CDataExchange* pDX)
  66. {
  67. //{{AFX_DATA_MAP(CXFloorWndPropPage)
  68. DDX_Control(pDX, IDC_STATIC_SLEEP, m_sSleep);
  69. DDX_Control(pDX, IDC_SLIDER_ANIMATION, m_sliderAnimation);
  70. DDX_Control(pDX, IDC_LIST_PAGES, m_listPages);
  71. DDP_Check(pDX, IDC_CHECK_ANIMATION, m_bAnimation, _T("Animation") );
  72. DDX_Check(pDX, IDC_CHECK_ANIMATION, m_bAnimation);
  73. DDP_Check(pDX, IDC_CHECK_SIGN, m_bSign, _T("Sign") );
  74. DDX_Check(pDX, IDC_CHECK_SIGN, m_bSign);
  75. DDP_Check(pDX, IDC_CHECK_PAGE, m_bAsPage, _T("AsPage"));
  76. DDX_Check(pDX, IDC_CHECK_PAGE, m_bAsPage);
  77. //}}AFX_DATA_MAP
  78. DDP_Long(pDX, &m_nSleep, _T("Sleep"));
  79. DDP_String(pDX, &m_sPages, _T("Pages"));
  80. DDP_PostProcessing(pDX);
  81. UpdateMSecond();
  82. }
  83. // Function name : CXFloorWndPropPage::UpdateMSecond
  84. // Description     : Update all static controls, after some data change
  85. // Return type : void 
  86. void CXFloorWndPropPage::UpdateMSecond()
  87. {
  88. m_sliderAnimation.SetRange(0,16);
  89. m_sliderAnimation.EnableWindow(m_bAnimation);
  90. m_sSleep.EnableWindow(m_bAnimation);
  91. m_sliderAnimation.SetPos(m_nSleep);
  92. CString sSleep; sSleep.Format(_T("%i ms"), m_nSleep * MulSleep);
  93. m_sSleep.SetWindowText(sSleep);
  94. UpdateStatic(m_bAnimation, IDC_STATIC_SCROLL);
  95. }
  96. void CXFloorWndPropPage::UpdateStatic(BOOL bValue, UINT idStatic)
  97. {
  98. CString text;
  99. CWnd* pStatic = GetDlgItem(idStatic);
  100. pStatic->GetWindowText(text); AfxExtractSubString(text,text,0,TCHAR(':'));
  101. text += CString(_T(": ")) + (bValue ? _T("on") : _T("off"));
  102. pStatic->SetWindowText(text);
  103. }
  104. /////////////////////////////////////////////////////////////////////////////
  105. // CXFloorWndPropPage message handlers
  106. // Function name : CXFloorWndPropPage::OnInitDialog
  107. // Description     : 
  108. // Return type : BOOL 
  109. BOOL CXFloorWndPropPage::OnInitDialog() 
  110. {
  111. COlePropertyPage::OnInitDialog();
  112. m_listPages.Init();
  113. m_listPages.Fill(m_sPages);
  114. OnObjectsChanged();
  115. return TRUE;  // return TRUE unless you set the focus to a control
  116.               // EXCEPTION: OCX Property Pages should return FALSE
  117. }
  118. // Function name : CXFloorWndPropPage::OnObjectsChanged
  119. // Description     : 
  120. // Return type : void 
  121. void CXFloorWndPropPage::OnObjectsChanged( )
  122. {
  123. }
  124. // Function name : CXFloorWndPropPage::OnCheckAnimation
  125. // Description     : 
  126. // Return type : void 
  127. void CXFloorWndPropPage::OnCheckAnimation() 
  128. {
  129. UpdateData();
  130. }
  131. // Function name : CXFloorWndPropPage::OnCheckSign
  132. // Description     : 
  133. // Return type : void 
  134. void CXFloorWndPropPage::OnCheckSign() 
  135. {
  136. UpdateData();
  137. }
  138. // Function name : CXFloorWndPropPage::OnHScroll
  139. // Description     : Checks if slider is changes
  140. // Return type : void 
  141. // Argument         : UINT nSBCode
  142. // Argument         : UINT nPos
  143. // Argument         : CScrollBar* pScrollBar
  144. void CXFloorWndPropPage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
  145. {
  146. if (pScrollBar)
  147. if (pScrollBar->GetSafeHwnd() == m_sliderAnimation.GetSafeHwnd())
  148. {
  149. m_nSleep = m_sliderAnimation.GetPos();
  150. SetModifiedFlag();
  151. UpdateMSecond();
  152. }
  153. COlePropertyPage::OnHScroll(nSBCode, nPos, pScrollBar);
  154. }
  155. // Function name : void
  156. // Description     : template function for store some information in persistance and reverse
  157. // Return type :
  158. // Argument         : CXFloorWndPropPage* pPage
  159. // Argument         : BOOL bSave
  160. // Argument         : classType* pValue
  161. // Argument         : LPCTSTR lpszPropertyName
  162. // Argument         : VARTYPE vType
  163. template <class classType> void DDP_DEFINE( CXFloorWndPropPage* pPage, BOOL bSave, classType* pValue, LPCTSTR lpszPropertyName, VARTYPE vType )
  164. {
  165. USES_CONVERSION;
  166. ULONG nObjects = NULL;
  167. LPDISPATCH* pDispatch = pPage->GetObjectArray(&nObjects);
  168. COleDispatchDriver propDispatch;
  169. for (int i = 0; i < (int)nObjects; i++)
  170. {
  171. LPCOLESTR lpOleStr = T2COLE(lpszPropertyName);
  172. DISPID dwDispID = NULL;
  173. if (SUCCEEDED(pDispatch[i]->GetIDsOfNames(IID_NULL, (LPOLESTR*)&lpOleStr, 1, 0, &dwDispID)))
  174. {
  175. propDispatch.AttachDispatch(pDispatch[i]);
  176. if (bSave)
  177. {
  178. classType nTemp = *pValue;
  179. propDispatch.SetProperty(dwDispID, vType, nTemp);
  180. }
  181. else
  182. {
  183. classType nTemp;
  184. propDispatch.GetProperty(dwDispID, vType, &nTemp);
  185. *pValue = nTemp;
  186. }
  187. propDispatch.DetachDispatch();
  188. }
  189. }
  190. }
  191. // Function name : CXFloorWndPropPage::DDP_Long
  192. // Description     : Save a long into persistatnce objects
  193. // Return type : void 
  194. // Argument         : CDataExchange * pDX
  195. // Argument         : long* pValue
  196. // Argument         : LPCTSTR lpszPropertyName
  197. void CXFloorWndPropPage::DDP_Long(CDataExchange* pDX, long* pValue, LPCTSTR lpszPropertyName)
  198. {
  199. DDP_DEFINE<long>(this, pDX->m_bSaveAndValidate, pValue, lpszPropertyName, VT_I4);
  200. }
  201. // Function name : CXFloorWndPropPage::DDP_String
  202. // Description     : Save a string into persistatnce objects
  203. // Return type : void 
  204. // Argument         : CDataExchange * pDX
  205. // Argument         : CString* pValue
  206. // Argument         : LPCTSTR lpszPropertyName
  207. void CXFloorWndPropPage::DDP_String(CDataExchange * pDX, CString* pValue, LPCTSTR lpszPropertyName)
  208. {
  209. DDP_DEFINE<CString>(this, pDX->m_bSaveAndValidate, pValue, lpszPropertyName, VT_BSTR);
  210. }
  211. // Function name : CXFloorWndPropPage::ConstructPagesAsString
  212. // Description     : Called by OnEndEditLabeEdit in m_listPages, for store m_sPages as pages.
  213. // Return type : void 
  214. void CXFloorWndPropPage::ConstructPagesAsString()
  215. {
  216. m_sPages.Empty();
  217. CString s(_cPagesSeparator);
  218. for (int i = 0; i < m_listPages.GetItemCount(); i++)
  219. m_sPages += m_listPages.GetItemText(i, m_listPages.m_nNamePageCol) + _T("\") + m_listPages.GetItemText(i, m_listPages.m_nUserDataCol) + s;
  220. }