home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 25 / CDROM25.iso / Share / prog / Taller / reloj.exe / RelojCtl.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-07-30  |  6.9 KB  |  256 lines

  1. // RelojCtl.cpp : Implementation of the CRelojCtrl ActiveX Control class.
  2.  
  3. #include "stdafx.h"
  4. #include "reloj.h"
  5. #include "RelojCtl.h"
  6. #include "RelojPpg.h"
  7.  
  8.  
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #undef THIS_FILE
  12. static char THIS_FILE[] = __FILE__;
  13. #endif
  14.  
  15.  
  16. IMPLEMENT_DYNCREATE(CRelojCtrl, COleControl)
  17.  
  18.  
  19. /////////////////////////////////////////////////////////////////////////////
  20. // Message map
  21.  
  22. BEGIN_MESSAGE_MAP(CRelojCtrl, COleControl)
  23.     //{{AFX_MSG_MAP(CRelojCtrl)
  24.     ON_WM_CREATE()
  25.     ON_WM_TIMER()
  26.     //}}AFX_MSG_MAP
  27.     ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
  28. END_MESSAGE_MAP()
  29.  
  30.  
  31. /////////////////////////////////////////////////////////////////////////////
  32. // Dispatch map
  33.  
  34. BEGIN_DISPATCH_MAP(CRelojCtrl, COleControl)
  35.     //{{AFX_DISPATCH_MAP(CRelojCtrl)
  36.     DISP_PROPERTY_NOTIFY(CRelojCtrl, "IntervaloActualizacion", m_intervaloActualizacion, OnIntervaloActualizacionChanged, VT_I4)
  37.     DISP_FUNCTION(CRelojCtrl, "Beep", Beep, VT_EMPTY, VTS_NONE)
  38.     DISP_STOCKFUNC_REFRESH()
  39.     DISP_STOCKPROP_BACKCOLOR()
  40.     DISP_STOCKPROP_FORECOLOR()
  41.     //}}AFX_DISPATCH_MAP
  42.     DISP_FUNCTION_ID(CRelojCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
  43. END_DISPATCH_MAP()
  44.  
  45.  
  46. /////////////////////////////////////////////////////////////////////////////
  47. // Event map
  48.  
  49. BEGIN_EVENT_MAP(CRelojCtrl, COleControl)
  50.     //{{AFX_EVENT_MAP(CRelojCtrl)
  51.     EVENT_CUSTOM("NuevoMinuto", FireNuevoMinuto, VTS_NONE)
  52.     EVENT_STOCK_CLICK()
  53.     EVENT_STOCK_DBLCLICK()
  54.     //}}AFX_EVENT_MAP
  55. END_EVENT_MAP()
  56.  
  57.  
  58. /////////////////////////////////////////////////////////////////////////////
  59. // Property pages
  60.  
  61. // TODO: Add more property pages as needed.  Remember to increase the count!
  62. BEGIN_PROPPAGEIDS(CRelojCtrl, 2)
  63.     PROPPAGEID(CRelojPropPage::guid)
  64.     PROPPAGEID(CLSID_CColorPropPage)
  65. END_PROPPAGEIDS(CRelojCtrl)
  66.  
  67.  
  68. /////////////////////////////////////////////////////////////////////////////
  69. // Initialize class factory and guid
  70.  
  71. IMPLEMENT_OLECREATE_EX(CRelojCtrl, "RELOJ.RelojCtrl.1",
  72.     0x9c6022a4, 0xcb07, 0x11d0, 0xaf, 0x87, 0, 0x40, 0x33, 0xca, 0x77, 0xbd)
  73.  
  74.  
  75. /////////////////////////////////////////////////////////////////////////////
  76. // Type library ID and version
  77.  
  78. IMPLEMENT_OLETYPELIB(CRelojCtrl, _tlid, _wVerMajor, _wVerMinor)
  79.  
  80.  
  81. /////////////////////////////////////////////////////////////////////////////
  82. // Interface IDs
  83.  
  84. const IID BASED_CODE IID_DReloj =
  85.         { 0x1f9998eb, 0x82f, 0x11d1, { 0xaf, 0x87, 0, 0x40, 0x33, 0xca, 0x77, 0xbd } };
  86. const IID BASED_CODE IID_DRelojEvents =
  87.         { 0x1f9998ec, 0x82f, 0x11d1, { 0xaf, 0x87, 0, 0x40, 0x33, 0xca, 0x77, 0xbd } };
  88.  
  89.  
  90. /////////////////////////////////////////////////////////////////////////////
  91. // Control type information
  92.  
  93. static const DWORD BASED_CODE _dwRelojOleMisc =
  94.     OLEMISC_ACTIVATEWHENVISIBLE |
  95.     OLEMISC_SETCLIENTSITEFIRST |
  96.     OLEMISC_INSIDEOUT |
  97.     OLEMISC_CANTLINKINSIDE |
  98.     OLEMISC_RECOMPOSEONRESIZE;
  99.  
  100. IMPLEMENT_OLECTLTYPE(CRelojCtrl, IDS_RELOJ, _dwRelojOleMisc)
  101.  
  102.  
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CRelojCtrl::CRelojCtrlFactory::UpdateRegistry -
  105. // Adds or removes system registry entries for CRelojCtrl
  106.  
  107. BOOL CRelojCtrl::CRelojCtrlFactory::UpdateRegistry(BOOL bRegister)
  108. {
  109.     // TODO: Verify that your control follows apartment-model threading rules.
  110.     // Refer to MFC TechNote 64 for more information.
  111.     // If your control does not conform to the apartment-model rules, then
  112.     // you must modify the code below, changing the 6th parameter from
  113.     // afxRegApartmentThreading to 0.
  114.  
  115.     if (bRegister)
  116.         return AfxOleRegisterControlClass(
  117.             AfxGetInstanceHandle(),
  118.             m_clsid,
  119.             m_lpszProgID,
  120.             IDS_RELOJ,
  121.             IDB_RELOJ,
  122.             afxRegApartmentThreading,
  123.             _dwRelojOleMisc,
  124.             _tlid,
  125.             _wVerMajor,
  126.             _wVerMinor);
  127.     else
  128.         return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
  129. }
  130.  
  131.  
  132. /////////////////////////////////////////////////////////////////////////////
  133. // CRelojCtrl::CRelojCtrl - Constructor
  134.  
  135. CRelojCtrl::CRelojCtrl()
  136. {
  137.     InitializeIIDs(&IID_DReloj, &IID_DRelojEvents);
  138.     SetInitialSize(100,15);
  139.     // TODO: Initialize your control's instance data here.
  140. }
  141.  
  142.  
  143. /////////////////////////////////////////////////////////////////////////////
  144. // CRelojCtrl::~CRelojCtrl - Destructor
  145.  
  146. CRelojCtrl::~CRelojCtrl()
  147. {
  148.     // TODO: Cleanup your control's instance data here.
  149. }
  150.  
  151.  
  152. /////////////////////////////////////////////////////////////////////////////
  153. // CRelojCtrl::OnDraw - Drawing function
  154.  
  155. void CRelojCtrl::OnDraw(
  156.             CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid)
  157. {
  158.     // TODO: Replace the following code with your own drawing code.
  159. //    pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
  160. //    pdc->Ellipse(rcBounds);
  161.  
  162.     pdc->SetTextColor(TranslateColor(GetForeColor()));
  163.     pdc->SetBkMode(TRANSPARENT);
  164.     CBrush bkBrush(TranslateColor(GetBackColor()));
  165.     pdc->FillRect(rcBounds, &bkBrush);
  166.  
  167.  
  168.     CTime hora = CTime::GetCurrentTime();
  169.  
  170.     CString HoraActual = hora.Format("%H : %M : %S");
  171.     pdc->ExtTextOut(rcBounds.left, rcBounds.top, ETO_CLIPPED, rcBounds, HoraActual, HoraActual.GetLength(), NULL);
  172.  
  173.     // Obtener la hora actual
  174.  
  175.     if( hora.GetSecond() == 0 )
  176.     {
  177.         FireNuevoMinuto();
  178.     }
  179.  
  180. }
  181.  
  182.  
  183. /////////////////////////////////////////////////////////////////////////////
  184. // CRelojCtrl::DoPropExchange - Persistence support
  185.  
  186. void CRelojCtrl::DoPropExchange(CPropExchange* pPX)
  187. {
  188.     ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
  189.     COleControl::DoPropExchange(pPX);
  190.  
  191.     // TODO: Call PX_ functions for each persistent custom property.
  192.     PX_Long(pPX, _T("IntervaloActualizacion"),m_intervaloActualizacion, 1000);
  193. }
  194.  
  195.  
  196. /////////////////////////////////////////////////////////////////////////////
  197. // CRelojCtrl::OnResetState - Reset control to default state
  198.  
  199. void CRelojCtrl::OnResetState()
  200. {
  201.     COleControl::OnResetState();  // Resets defaults found in DoPropExchange
  202.  
  203.     // TODO: Reset any other control state here.
  204. }
  205.  
  206.  
  207. /////////////////////////////////////////////////////////////////////////////
  208. // CRelojCtrl::AboutBox - Display an "About" box to the user
  209.  
  210. void CRelojCtrl::AboutBox()
  211. {
  212.     CDialog dlgAbout(IDD_ABOUTBOX_RELOJ);
  213.     dlgAbout.DoModal();
  214. }
  215.  
  216.  
  217. /////////////////////////////////////////////////////////////////////////////
  218. // CRelojCtrl message handlers
  219.  
  220. int CRelojCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
  221. {
  222.     if (COleControl::OnCreate(lpCreateStruct) == -1)
  223.         return -1;
  224.     
  225.  
  226.     SetTimer (ID_TIMER, (UINT) m_intervaloActualizacion, NULL);
  227.  
  228.     return 0;
  229. }
  230.  
  231. void CRelojCtrl::OnTimer(UINT nIDEvent) 
  232. {
  233.     InvalidateControl();
  234.     
  235.     COleControl::OnTimer(nIDEvent);
  236. }
  237.  
  238. void CRelojCtrl::OnIntervaloActualizacionChanged() 
  239. {
  240.     // TODO: Add notification handler code
  241.     if( m_intervaloActualizacion < 0 )
  242.     {
  243.         MessageBox("S≤lo se aceptan valores positivos");
  244.         m_intervaloActualizacion = 1000;
  245.     }
  246.     SetTimer(ID_TIMER, (UINT) m_intervaloActualizacion, NULL);
  247.  
  248.  
  249.     SetModifiedFlag();
  250. }
  251.  
  252. void CRelojCtrl::Beep() 
  253. {
  254.     MessageBeep((WORD)-1);
  255. }
  256.