Server : Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6 System : Windows NT USER-PC 6.1 build 7601 (Windows 7 Professional Edition Service Pack 1) AMD64 User : User ( 0) PHP Version : 7.4.6 Disable Function : NONE Directory : C:/xampp/FileZillaFTP/source/interface/misc/ |
/////////////////////////////////////////////////////////////////////////////// // Led.cpp : implementation file // Visual Source Safe: $Revision: 1.3 $ // // Led static control. Will display a LED in 4 different colors and two shapes. /////////////////////////////////////////////////////////////////////////////// // Copyright (C) 1998-1999 Monte Variakojis ( monte@apollocom.com ) // All rights reserved - not to be sold. /////////////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "../resource.h" #include "Led.h" #if defined(_DEBUG) && !defined(MMGR) #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CLed #define TIMER_ID_PING 1 // Timer Ping ID /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// CLed::CLed() { m_LedBitmap.LoadBitmap(IDB_LEDS); m_nLedColor = LED_COLOR_RED; m_nLedMode = LED_OFF; m_nLedShape = LED_ROUND; m_continuePing = false; } CLed::~CLed() { VERIFY(m_LedBitmap.DeleteObject()); } BEGIN_MESSAGE_MAP(CLed, CStatic) //{{AFX_MSG_MAP(CLed) ON_WM_PAINT() ON_WM_TIMER() ON_WM_CREATE() ON_WM_ERASEBKGND() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CLed message handlers /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// void CLed::OnPaint() { CPaintDC dc(this); // device context for painting DrawLed(&dc,m_nLedColor,m_nLedMode,m_nLedShape); // Do not call CStatic::OnPaint() for painting messages } /////////////////////////////////////////////////////////////////////////////// // Name: SetLed // Description: This method will draw the LED to the specified DC. // // Entry: // CDC *pDC - DC to draw to // // int iLedColor - Where color is defined by: // LED_COLOR_RED // LED_COLOR_GREEN // LED_COLOR_YELLOW // LED_COLOR_BLUE // // int iMode - where mode is defined by: // LED_ON // LED_OFF // LED_DISABLED // // int iShape - where shape is defined by: // LED_ROUND // LED_SQUARE /////////////////////////////////////////////////////////////////////////////// void CLed::DrawLed(CDC *pDC,int nLEDColor, int nMode, int nShape) { CRect rect; GetClientRect(&rect); // // Center led within an oversized window // if(rect.Width() >= LED_SIZE && rect.Height() >= LED_SIZE) { int nWidth = rect.Width(); int nHeight = rect.Height(); rect.left += (nWidth - LED_SIZE)/2; rect.right -= (nWidth - LED_SIZE)/2; rect.top += (nHeight - LED_SIZE)/2; rect.bottom -= (nHeight - LED_SIZE)/2; } // // Prepare temporary DCs and bitmaps // CBitmap TransBitmap; TransBitmap.CreateBitmap(LED_SIZE,LED_SIZE,1,1,NULL); CBitmap bitmapTemp; CBitmap* pBitmap = &m_LedBitmap; CDC srcDC; CDC dcMask; CDC TempDC; TempDC.CreateCompatibleDC(pDC); srcDC.CreateCompatibleDC(pDC); dcMask.CreateCompatibleDC(pDC); CBitmap* pOldBitmap = srcDC.SelectObject(pBitmap); CBitmap* pOldMaskbitmap = dcMask.SelectObject(&TransBitmap); bitmapTemp.CreateCompatibleBitmap(pDC,LED_SIZE,LED_SIZE); // // Work with tempDC and bitmapTemp to reduce flickering // CBitmap *pOldBitmapTemp = TempDC.SelectObject(&bitmapTemp); TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE, pDC, rect.left, rect.top, SRCCOPY); // // Create mask // COLORREF OldBkColor = srcDC.SetBkColor(RGB(255,0,255)); dcMask.BitBlt(0, 0, LED_SIZE, LED_SIZE,&srcDC, nMode*LED_SIZE, nLEDColor+nShape, SRCCOPY); TempDC.SetBkColor(OldBkColor); // // Using the IDB_LEDS bitmap, index into the bitmap for the appropriate // LED. By using the mask color (RGB(255,0,255)) a mask has been created // so the bitmap will appear transparent. // TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE, &srcDC, nMode*LED_SIZE, nLEDColor+nShape, SRCINVERT); TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE,&dcMask, 0, 0, SRCAND); TempDC.BitBlt(0, 0, LED_SIZE, LED_SIZE, &srcDC, nMode*LED_SIZE, nLEDColor+nShape, SRCINVERT); // // Since the actual minipulation is done to tempDC so there is minimal // flicker, it is now time to draw the result to the screen. // pDC->BitBlt(rect.left, rect.top, LED_SIZE, LED_SIZE, &TempDC, 0, 0, SRCCOPY); // // House cleaning // srcDC.SelectObject(pOldBitmap); dcMask.SelectObject(pOldMaskbitmap); TempDC.SelectObject(pOldBitmapTemp); VERIFY(srcDC.DeleteDC()); VERIFY(dcMask.DeleteDC()); VERIFY(TempDC.DeleteDC()); VERIFY(TransBitmap.DeleteObject()); VERIFY(bitmapTemp.DeleteObject()); } /////////////////////////////////////////////////////////////////////////////// // Name: SetLed // Description: This method will draw and set led parameters. // // Entry: int iLedColor - Where color is defined by: // LED_COLOR_RED // LED_COLOR_GREEN // LED_COLOR_YELLOW // LED_COLOR_BLUE // // int iMode - where mode is defined by: // LED_ON // LED_OFF // LED_DISABLED // // int iShape - where shape is defined by: // LED_ROUND // LED_SQUARE /////////////////////////////////////////////////////////////////////////////// void CLed::SetLed(int nLedColor, int nMode, int nShape) { m_nLedColor = nLedColor; m_nLedMode = nMode; m_nLedShape = nShape; CDC *pDC; pDC = GetDC(); DrawLed(pDC, m_nLedColor, m_nLedMode, m_nLedShape); ReleaseDC(pDC); m_bPingEnabled = FALSE; } /////////////////////////////////////////////////////////////////////////////// // Name: Ping // Description: This method will turn the led on for dwTimeout milliseconds and // then turn it off. // // Entry: DWORD dwTimeout - Time out in milliseconds /////////////////////////////////////////////////////////////////////////////// void CLed::Ping(DWORD dwTimeout) { // Return if pinging if (m_bPingEnabled == TRUE) { m_continuePing = true; } else { m_bPingEnabled = TRUE; SetLed(m_nLedColor, CLed::LED_ON, m_nLedShape); SetTimer(TIMER_ID_PING, dwTimeout, NULL); } } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// void CLed::OnTimer(UINT_PTR nIDEvent) { if (nIDEvent == TIMER_ID_PING) { if (m_continuePing) m_continuePing = false; else { SetLed(m_nLedColor, CLed::LED_OFF, m_nLedShape); KillTimer(nIDEvent); m_bPingEnabled = FALSE; } } CStatic::OnTimer(nIDEvent); } /////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// BOOL CLed::OnEraseBkgnd(CDC* pDC) { // No background rendering return TRUE; } /////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////