A colorful progress bar of simple package [original]

xiaoxiao2021-03-06  41

A colorful progress bar of simple package [original] / / ====================================== =================== //// CopyRight (C) 2000-2004 iWise Technologies, Co. Ltd. Ltd. LTD./ALL Rights reserved.///product: IW988 // file: gradientprogressctrl.h // create: Tianda Sewed //// Description: 2004.12.28 20: 12: 00 // ValueAdded Main Program for IW988.// Contact: // Waterpub@mail.9cbs.net / / / =============================================== =========== # prgma overce

Class CGROGROGRESSCTRL: PUBLIC CPROGRESSCTRL {public: cgradientProgressCtrl (); // Constructs Virtual ~ CGRADIENTPROGRESSCTRL (); // Destructure

INT setPos (INT NPOS); // Setting the position int setstep; // Setting the VOID SetRange (int nlower, int nuppper); // Setting range int settext (const char * ptext, bool bowt = true ); // Set the display text

Public: void showpercent (Bool BshowPercent = true) {m_bshowpercent = bshowpercent;} // Show percentage vid showtext = true) {m_bshowtext = bshowtext;} // Display text

public: COLORREF GetTextColor (void) {return m_clrText;} // Get font color COLORREF GetBkColor (void) {return m_clrBkGround;} // obtaining background color COLORREF GetStartColor (void) {return m_clrStart;} // start color achieved COLORREF GetEndColor ( void) {return m_clrEnd;} // end color achieved void SetStartColor (COLORREF color) {m_clrStart = color;} // set the font color void SetEndColor (COLORREF color) {m_clrEnd = color;} // set the background color void SetTextColor (COLORREF color) {m_clrText = color;} // set the start color void SetBkColor (COLORREF color) // end color set {m_clrBkGround = color; m_BKGroundBrush.DeleteObject (); m_BKGroundBrush.CreateSolidBrush (m_clrBkGround);} private: void Draw (CPaintDC * PDC, Const Rect & RectClient, Const Int & nmaxWidth; AFX_MSG Void OnPaint (); DECLARE_MESSAGE_MAP ()

Private: // Variable Definition INT M_NLOWER; / / Minimum INT M_NUPPER; / / Maximum INT M_NSTEP; // Step Value INT M_NCURPOS; // Current Value ColorRef M_clrstart; // Start Color ColorRef M_Clrend; // End Color ColorRef m_clrbkground; // background color colorRef m_clrtext; // text color bool m_bshowpercent; // display percentage BOOL M_BSHOWTEXT; // Display text

Char m_text [32]; // Text: such as copy speed char m_percent [4]; // Text: percentage

CBRUSH M_BKGROUNDBRUSH; / / Background Brush CBRUSH M_TEMPBRUSH; // Temporary Brush

Private: // Continuous Class CMEMDC: PUBLIC CDC // Memory device {public: cmemdc (CDC * PDC): CDC () {assert (pdc! = null);

m_pDC = pDC; m_pOldBitmap = NULL; m_bMemDC = pDC-> IsPrinting ();! // graphics device or printer device if (m_bMemDC) {pDC-> GetClipBox (& m_rect); CreateCompatibleDC (pDC); m_bitmap.CreateCompatibleBitmap (pDC, m_rect .Width (), m_rect.Height ()); m_poldbitmap = selectobject (& m_bitmap); setWindoworg (m_rect.left, m_rect.top);} else // Prepare print {m_bprinting = PDC-> m_bprinting; M_HDC = PDC-> m_HDC; m_hattribdc = pdc-> m_hattribdc;}} Virtual ~ cmemdc () {if (m_bmemdc) {m_pdc-> bitblt (m_rect.wid, m_rect.top, m_rect.width (), m_rect.height ( ), this, m_rect.left, m_rect.top, SRCCOPY); SelectObject (m_pOldBitmap);} else {m_hDC = m_hAttribDC = NULL;}} CMemDC * operator -> () {return this;} operator CMemDC * () {return This;} private: cbitmap m_bitmap; cbitmap * m_poldbitmap; // CDC * m_pdc; // CRECT M_RECT; / / BOOL M_BMEMDC; //};

/ / =========================================================================================================================================================================================== ========= //// CopyRight (C) 2000-2004 iWise Technologies, co. Ltd.///////product: IW988 // file: gradientprogressctrl.cpp // created : Tianda Sewed //// Description: // ValueAdded Main Program for IW988.// Contact: // Waterpub@mail.9cbs.net/ / / ============== ============================================ # include "stdafx.h" #include "gradientprogressctrl.h" CGRADIENTPROGRESSCTRL :: CGRADIENTPROGRESSCTRL :: CGRADIENTPROGRESSCTRL () {// control initialization m_nlower = 0; m_nupper = 100; m_ncurpos = 0; m_NSTEP = 1;

// Initialize display color m_clrstart = colorref (RGB (255, 0, 0)); m_clrend = colorref (RGB (0, 0, 255)); m_clrbkground = :: getSyscolor (color_3dface); m_clrtext = colorref (RGB (255, 255, 255));

// Show percentage, text m_bshowpercent = true; m_bshowtext = true;

m_bkgroundbrush.createsolidbrush (m_clrbkground); MEMSET (M_Text, 0, 32);

CGRADIENTPROGRESSCTRL :: ~ cgradientProgressCtrl () {m_bkgroundbrush.deleteObject ();

Begin_Message_Map (CGROGROGRESSCTRL, CPROGRESSCTRL) ON_WM_PAINT () end_MESSAGE_MAP ()

/// CGRADIENTPROGRESSCTRL message handler

void CGradientProgressCtrl :: SetRange (int nLower, int nUpper) {// set the progress bar range m_nLower = nLower; m_nUpper = nUpper; m_nCurPos = nLower; CProgressCtrl :: SetRange (nLower, nUpper); CProgressCtrl :: SetPos (nLower); }

INT CGRADIENTPROGRESSCTRL :: setstep (int nstep) {// Settings step value m_nstep = nstep; return (CProgressCtrl :: setstep);}

INT CGRADIENTPROGRESSCTRL :: SetPOS (INT NPOS) {// Set progress bar position m_ncurpos = npos; return (CPROGRESSCTRL :: setPos (NPOS));}

INT CGRADIENTPROGRESSCTRL :: setText (const char * ptext, bool bowt) {// Display text strcpy; if (Brepaint && m_bshowtext) {invalidate (TRUE);}

Return 0;}

Void cgradientprogressctrl :: onpaint () {cpaintdc dc (this); // device environment

// TODO: Heavy painting progress bar Rect RectClient; getClientRect (& RectClient);

IF (m_ncurpos <= m_nlower || m_ncurpos> m_nupper) {// Does DC.FillRect (& RectClient, & M_BKGroundBrush;}); Return;}

// Draw the progress bar itself float maxwidth (FLOAT) m_ncurpos / (float) m_nupper * (float) RectClient.right); DRAW (& DC, RectClient, (int) maxwidth);

// text display dc.SetTextColor (m_clrText); dc.SetBkMode (TRANSPARENT); HGDIOBJ hOldFont = :: SelectObject (dc.m_hDC, :: GetStockObject (DEFAULT_GUI_FONT)); if (m_bShowPercent) {// Percentage displays a progress bar sprintf ( M_Percent, "% D %%", (int) (100 * (float) m_ncurpos / m_nupper); dc.drawtext (m_percent, & receclient, dt_vcenter | dt_center | dt_singeline);} if (m_bshowtext) {// Display Process Bar Text RectClient.Left = (RectClient.Left RectClient.right) / 2; DC.Drawtext (m_text, & receclient, dt_vcenter | dt_center | dt_singeline);} :: selectObject (dc.m_hdc, holdfont);

/ / Do not call CPROGRESSCTRL :: onpaint ()}

void CGradientProgressCtrl :: Draw (CPaintDC * pDC, const RECT & rectClient, const int & nMaxWidth) {RECT rectFill; // display region float fStep; // for each step width CMemDC memDC (pDC); int r, g, b; float RSTEP, GSTEP, BSTEP; // Get different colors and subtraction, return to the maximum difference R = (GtrValue (m_clrstart); g = (getGvalue (m_clrstart) - getGvalue (m_clrstart) ; B = (getBValue (m_clRend) - getBvalue (m_clrstart)); // Make the total number of processes display equal to the maximum color difference INT nsteps = max (ABS (R), Max (ABS (g), ABS (B) ))); / / Determine how large the rectangular area fstep = (float) in each color is filld by the rectclient.right / (float) nsteps; // Setting the number of steps RSTEP = R / (FLOAT) nsteps; gstep = g / (float) nsteps; bstep = b / (float) nsteps;

R = getRvalue (m_clrstart); g = getGValue (m_clrstart); b = getBValue (m_clrstart); // Draw color gradient process strips for (int ionband = 0; Ionband

VERIFY (m_TempBrush.CreateSolidBrush (RGB (r rStep * iOnBand, g gStep * iOnBand, b bStep * iOnBand))); memDC.FillRect (& rectFill, & m_TempBrush); VERIFY (m_TempBrush.DeleteObject ()); // in before the drawing is completed by filling the background color of the client area if (rectFill.right> nMaxWidth) {:: SetRect (& rectFill, rectFill.right, 0, rectClient.right, rectClient.bottom); VERIFY (m_TempBrush.CreateSolidBrush ( m_clrbkground); MEMDC.FILLRECT (& RectFill, & M_Tempbrush); verify (m_tempbrush.deleteObject ()); return;}}}

转载请注明原文地址:https://www.9cbs.com/read-54970.html

New Post(0)