// Ticker.cpp : Implementation of CTicker #include "stdafx.h" #include "TickerControl.h" #include "Ticker.h" #include "TickerControlCP.h" ///////////////////////////////////////////////////////////////////////////// // CTicker static CTicker *pTick; CTicker::CTicker() : m_border(TRUE) { timerID = ::SetTimer(NULL,0,1000,TimerProc); pTick = this; } VOID CALLBACK TimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime) { pTick->FireViewChange(); } LRESULT CTicker::OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { Fire_OnMouseLBDown(); Beep(200,200); return 0; } LRESULT CTicker::OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { ::Beep(300,300); ::KillTimer(NULL,timerID); return 0; } LRESULT CTicker::OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) { ::KillTimer(NULL,timerID); return 0; } HRESULT CTicker::OnDraw(ATL_DRAWINFO& di) { RECT& rc = *(RECT*)di.prcBounds; if(m_border) Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom); SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE); std::string date = GetDate(); LPCTSTR pszText = _T(date.c_str()); TextOut(di.hdcDraw, (rc.left + rc.right) / 2, (rc.top + rc.bottom) / 2, pszText, lstrlen(pszText)); std::string time = GetTime(); pszText = _T(time.c_str()); TextOut(di.hdcDraw, (rc.left + rc.right) / 2, (rc.top + rc.bottom + 60) / 2, pszText, lstrlen(pszText)); return S_OK; } std::string CTicker::GetTime() { SYSTEMTIME ST; LPSYSTEMTIME lpST = &ST; ::GetLocalTime(lpST); int hours = lpST->wHour; if(hours > 12) hours -= 12; int minutes = lpST->wMinute; int seconds = lpST->wSecond; std::ostringstream collect; collect.fill('0'); collect << std::setw(2) << hours << ':' << std::setw(2) << minutes << ':' << std::setw(2) << seconds; std::string time = collect.str(); return time; } std::string CTicker::GetDate() { SYSTEMTIME ST; LPSYSTEMTIME lpST = &ST; ::GetLocalTime(lpST); int years = lpST->wYear; int months = lpST->wMonth; int days = lpST->wDay; std::ostringstream collect; collect.fill('0'); collect << std::setw(2) << months << '/' << std::setw(2) << days << '/' << std::setw(4) << years; std::string date = collect.str(); return date; } STDMETHODIMP CTicker::get_DrawBorder(BOOL *pVal) { *pVal = m_border; return S_OK; } STDMETHODIMP CTicker::put_DrawBorder(BOOL newVal) { m_border = newVal; Beep(300,300); return S_OK; }