A colorful progress bar of simple package [original]

xiaoxiao2021-03-06  41

/ / =========================================================================================================================================================================================== =========

//

// CopyRight (C) 2000-2004 IWISE TECHNOLOGIES, CO. LTD.

// All Rights Reserved.

//

// Product: IW988

// file: gradientprogressctrl.h

// Created: Tiansuit

//

// Description: 2004.12.28 20:12:00

// ValueAdded Main Program for IW988.

//Undact:

// Waterpub@mail.9cbs.net

//

/ / =========================================================================================================================================================================================== =========

#pragma overce

Class CGRADIENTPROGRESSCTRL: Public CPROGRESSCTRL

{

PUBLIC:

CGRADIENTPROGRESSCTRL (); // Construction

Virtual ~ cgradientProgressCtrl (); // Destructure

INT setPos (INT NPOS); // Setting position

INT setstep; // Setting the step value

Void setRange (int nlower, int nupper); // setting range

INT setText (const char * ptext, bool bowt = true); // Set display text

PUBLIC:

Void showpercent = true) {m_bshowpercent = bshowpercent;} // display percentage

Void ShowText (Bool BshowText = true) {m_bshowtext = bshipText;} // Display text

PUBLIC:

ColorRef getTextColor (void) {return m_clrtext;} // get font color

ColorRef getBkcolor (void) {return m_clrbkground;} // get background colors

ColorRef getStartColor (void) {return m_clrstart;} // get the start color

ColorRef getndcolor (void) {return m_clrend;} // get the end color

Void SetStartColor (ColorRef Color) {m_clrstart = color;} // Set Font Color Void SetEndColor (ColorRef Color) {m_clrend = color;} // Set background color

Void SetTextColor (ColorRef Color) {m_clrtext = color;} // Setting Start Color

Void SetBkcolor // Settings End Color

{

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 definitions

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; // Show percentage

BOOL M_BSHOWTEXT; / / Display text

Char m_text [32]; // Text: If a copy speed is displayed

Char M_Percent [4]; // Text: percentage

CBRUSH M_BKGROUNDBRUSH; / / Background Brush

CBRUSH M_TEMPBRUSH; // Temporary Brush

Private:

// Embedding

Class CMEMDC: Public CDC // Memory device environment

{

PUBLIC:

CMEMDC (CDC * PDC): CDC ()

{

ASSERT (PDC! = Null);

M_PDC = PDC;

m_Poldbitmap = NULL;

M_BMEMDC =! PDC-> isprinting ();

// Graphic equipment or printer equipment

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 for existing equipment

{

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.left,

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.

// All Rights Reserved.

//

// Product: IW988

// file: gradientprogressctrl.cpp

// Created: Tiansuit

//

// Description:

// ValueAdded Main Program for IW988.

//Undact:

// Waterpub@mail.9cbs.net

//

/ / =========================================================================================================================================================================================== =========

#include "stdafx.h"

#include "gradientprogressctrl.h"

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 (CGRADIENTPROGRESSCTRL, CPROGRESSCTRL)

ON_WM_PAINT ()

END_MESSAGE_MAP ()

/

// CGRADIENTPROGRESSCTRL message handler

Void CGRADIENTPROGRESSCTRRL :: SetRange (int nlower, int nupper)

{

/ / Set the range of progress bars

m_nlower = nlower;

m_nupper = nupper;

m_ncurpos = nlower;

CPROGRESSCTRL :: SetRange (nlower, nupper);

CPROGRESSCTRL :: setPos (NLOWER);

}

INT CGRADIENTPROGRESSCTRL :: setstep (int NSTEP)

{

// Set the step value

M_NSTEP = NSTEP;

Return (CPROGRESSCTRL :: setstep (nstep));

}

Int CgradientProgressCtrl :: setpos (int NPOS)

{

/ / Set the progress bar position

m_ncurpos = npos;

Return (CPROGRESSCTRL :: SetPOS (NPOS));

}

Int CgradientProgressCtrl :: setText (const char * ptext, bool bowt)

{

// Show text

STRCPY (M_Text, PText);

IF (Brepaint && M_BShowText)

{

INVALIDATE (TRUE);

}

Return 0;

}

Void cgradientProgressCtrl :: onpaint ()

{

CPAINTDC DC (this); // Equipment Environment

// Todo: Heavy painting progress bar

RECT RectClient;

GetClienceRect (& RectClient);

IF (m_ncurpos <= m_nlower || m_ncurpos> m_nupper)

{

// Do not populate the background color directly

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)

{

// Display process bar percentage

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 provisions

RectClient.Left = (RectClient.Left RectClient.right) / 2;

Dc.drawtext (M_Text, & RectClient, DT_VCenter | DT_Center | DT_SIINGLINE);

}

:: SelectObject (Dc.m_HDC, HoldFont);

/ / Do not call CPROGRESSCTRL :: onpaint ()

}

Void CGRADIENTPROGRESSCTRL :: DRAW (CPAINTDC * PDC, Const Rect & RectClient, Const INT & NMAXWIDTH)

{

Rect RectFill; // Display area

Float fstep; // Width every step

CMEMDC MEMDC (PDC);

INT R, G, B;

Float RSTEP, GSTEP, BSTEP;

/ / Get different colors and subtract, return to the maximum difference between colors

R = (GtrValue (M_Clrend) - GtrValue (m_clrstart);

g = (getGvalue (m_clrend) - getGvalue (m_clrstart);

b = (getBValue (m_clrend) - getBValue (m_clrstart);

/ / Make the total number of process strips equal to the maximum color difference

INT nsteps = max (ABS (R), Max (ABS (g), ABS (b));

/ / Determine how much rectangular area in each color

FSTEP = (FLOAT) RectClient.right / (float) nsteps;

/ / Set the number of steps that are filled in each color

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 a process strip of color gradient

For (int Ionband = 0; Ionband

{

:: setRect (& RectFill, IND) (IONBAND * fstep), 0, // Fill the left upper left upper left angle x, y, and lower right angle X, Y

(INT) (IONBAND 1) * fstep, RectClient.bottom 1);

Verify (m_tempbrush.createsolidbrush (RGB (R Rstep * Ionband,

G GStep * Ionband,

B BSTEP * IONBAND))))))

MEMDC.FILLRECT (& RectFill, & M_Tempbrush);

Verify (m_tempbrush.deleteObject ());

// Before the draw, use the background color filled with the customer area

IF (RectFill.right> nmaxwidth)

{

:: SetRect (& RectFill, Rectfill.right, 0, RectClient.Right,

RectClient.bottom;

Verify (m_tempbrush.createsolidbrush); MEMDC.FILLRECT (& RectFill, & M_Tempbrush);

Verify (m_tempbrush.deleteObject ());

Return;

}

}

}

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

New Post(0)