/ / =========================================================================================================================================================================================== =========
//
// 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; } } }