?? cdrawlineargauge.cpp
字號:
// CDrawLinearGauge.cpp: implementation of the CDrawLinearGauge class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CDrawLinearGauge.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CDrawLinearGauge::CDrawLinearGauge()
{
m_Orientation=1;
m_Style=1;
m_rulerStyle=0;
m_rect.left=0;
m_rect.top=0;
m_rect.bottom=0;
m_rect.right=0;
m_rulerRect=m_rect;
m_frameRect=m_rect;
m_iMax=0;
m_iMin=0;
m_imajortics=0;
m_iminortics=0;
Visibled=1;
}
CDrawLinearGauge::~CDrawLinearGauge()
{
}
void CDrawLinearGauge::SetVisibled(int iFlag)
{
Visibled=iFlag;
}
int CDrawLinearGauge::GetVisibled()
{
return Visibled;
}
void CDrawLinearGauge::SetStyle(long Style,long Orientation,long rulerStyle)
{
m_Style = Style;
m_Orientation = Orientation;
m_rulerStyle = rulerStyle;
}
void CDrawLinearGauge::SetRect(RECT rc)
{
m_rect = rc;
/*m_rect.top = m_rect.top +30;
m_rect.left = m_rect.left +30;
m_rect.right = m_rect.right -30;
m_rect.bottom = m_rect.bottom -30;*/
m_frameRect=m_rect;
m_rulerRect = m_frameRect;
if(m_Orientation==0)//0:Horizontal,1:Vertical
{
//m_rect.left = m_rect.left+20;
//m_rect.right = m_rect.right-20;
switch(m_rulerStyle)//0不顯示,1左/上,2右/下,3左右/上下,4,中/左,5,中/右
{
case 0:
m_frameRect=m_rect;
break;
case 1:
m_rulerRect=m_rect;
m_rulerRect.bottom = (m_rect.bottom+m_rect.top)/2;
m_frameRect=m_rect;
m_frameRect.top = (m_rect.bottom+m_rect.top)/2;
break;
case 2:
m_frameRect=m_rect;
m_frameRect.bottom = (m_rect.bottom+m_rect.top)/2;
m_rulerRect=m_rect;
m_rulerRect.top = (m_rect.bottom+m_rect.top)/2;
break;
case 3:
break;
case 4:
case 5:
m_frameRect=m_rect;
m_rulerRect=m_rect;
break;
}
}
else if(m_Orientation==1)//0:Horizontal,1:Vertical
{
m_rect.top = m_rect.top;
//m_rect.bottom = m_rect.bottom-20;
switch(m_rulerStyle)//0不顯示,1左/上,2右/下,3左右/上下,4,中/左,5,中/右
{
case 0:
m_frameRect=m_rect;
break;
case 1:
m_rulerRect=m_rect;
m_rulerRect.right = (m_rect.left+m_rect.right)/2;
m_frameRect=m_rect;
m_frameRect.left = (m_rect.left+m_rect.right)/2;
break;
case 2:
m_frameRect=m_rect;
m_frameRect.right = (m_rect.left+m_rect.right)/2;
m_rulerRect=m_rect;
m_rulerRect.left = (m_rect.left+m_rect.right)/2;
break;
case 3:
break;
case 4:
case 5:
m_rulerRect=m_rect;
m_frameRect=m_rect;
break;
}
}
}
void CDrawLinearGauge::Draw(HDC hdc)
{
if(Visibled==1)
{
DrawFrame(hdc);
DrawValueFrame(hdc);
DrawRuler(hdc);
}
}
int CDrawLinearGauge::GetValueCount()
{
return m_ArraryValue.GetSize();
}
void CDrawLinearGauge::GetRect(RECT *rc)
{
rc = &m_rect;
}
void CDrawLinearGauge::SetFrame(COLORREF frameColor,COLORREF bkColor)
{
m_frameColor = frameColor;
m_bkColor = bkColor;
}
void CDrawLinearGauge::DrawFrame(HDC hdc)
{
RECT rect = m_frameRect;
HPEN hPen = CreatePen(PS_SOLID,1,m_frameColor);
HBRUSH hBrush = CreateSolidBrush(m_bkColor);
SelectObject(hdc,hPen);
FillRect (hdc, &rect, hBrush) ;
MoveToEx(hdc,rect.left,rect.top,NULL);
LineTo(hdc,rect.right,rect.top);
LineTo(hdc,rect.right,rect.bottom);
LineTo(hdc,rect.left,rect.bottom);
LineTo(hdc,rect.left,rect.top);
DeleteObject (hBrush);
DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))) ;
}
void CDrawLinearGauge::SetMaxMin(long iMax,long iMin)
{
m_iMax=iMax;
m_iMin=iMin;
}
long CDrawLinearGauge::GetMax()
{
return m_iMax;
}
long CDrawLinearGauge::GetMin()
{
return m_iMin;
}
void CDrawLinearGauge::SetRuler(long iMax,long iMin,long imajortics,long iminortics,COLORREF majorticsColor,COLORREF minorticsColor,COLORREF rulerFontColor)
{
m_iMax=iMax;
m_iMin=iMin;
m_imajortics=imajortics;
m_iminortics=iminortics;
m_majorticsColor=majorticsColor;
m_minorticsColor=minorticsColor;
m_rulerFontColor=rulerFontColor;
}
void CDrawLinearGauge::DrawRuler(HDC hdc)
{
HPEN hPen;
CString strimajorscale;
int i=0;
int y1=0;
int y2=0;
int n=0;
int x1=0;
int x2=0;
CRect rect = m_rulerRect;
if(m_Orientation==0)//0:Horizontal
{
n = m_imajortics * m_iminortics;
y1 = rect.top + 1;
y2 = rect.bottom - 2;
int imajorscale = (m_iMax - m_iMin) / m_imajortics;
int iTemp=0;//=m_iMin/imajorscale;
for (i = 0; i <= n; i++)
{
int x = rect.left + i * rect.Width() / n;
if ((i % m_iminortics) == 0)
{
hPen = CreatePen(PS_SOLID,1,m_majorticsColor);
SelectObject(hdc,hPen);
SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,m_rulerFontColor);
strimajorscale.Format(_T("%d"),m_iMin + imajorscale*iTemp);
//DrawText(hdc,strimajorscale,strimajorscale.GetLength(),CRect(x, y1,x+20,y1+20), DT_LEFT | DT_SINGLELINE | DT_VCENTER);
DrawText(hdc,strimajorscale,strimajorscale.GetLength(),CRect(x-30, y1,x+30,y2), DT_CENTER | DT_SINGLELINE | DT_VCENTER);
//TextOut(*m_pDC,x, y1,strimajorscale,strimajorscale.GetLength());
iTemp++;
MoveToEx(hdc,x, y1+20,NULL);
LineTo(hdc,x, y2);
DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))) ;
}
else
{
//hPen = CreatePen(PS_SOLID,1,m_iminortics);
//SelectObject(hdc,hPen);
}
}
}
else if(m_Orientation==1)//1:Vertical
{
n = m_imajortics * m_iminortics;
x1 = rect.left + 1;
x2 = rect.right - 2;
int imajorscale = (m_iMax - m_iMin) / m_imajortics;
int iTemp=0;//m_iMin/imajorscale;
for (i = 0; i <= n; i++)
{
int y = rect.bottom - i * rect.Height() / n;
if ((i % m_iminortics) == 0)
{
hPen = CreatePen(PS_SOLID,1,m_majorticsColor);
SelectObject(hdc,hPen);
SetBkMode(hdc,TRANSPARENT);
SetTextColor(hdc,m_rulerFontColor);
strimajorscale.Format(_T("%d"),m_iMin + imajorscale*iTemp);
DrawText(hdc,strimajorscale,strimajorscale.GetLength(),CRect(x1, y,x2,y+20), DT_CENTER | DT_SINGLELINE | DT_VCENTER);
iTemp++;
MoveToEx(hdc,x1, y,NULL);
LineTo(hdc,x2-20, y);
DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))) ;
}
else
{
//hPen = CreatePen(PS_SOLID,1,m_iminortics);
//SelectObject(hdc,hPen);
}
}
}
}
void CDrawLinearGauge::SetValueCount(int iCount)
{
m_ArraryValue.SetSize(iCount);
}
void CDrawLinearGauge::SetValueFrame(int index,COLORREF valueframeColor,COLORREF valuebkColor,long value)
{
m_valueframeColor = valueframeColor;
m_valuebkColor = valuebkColor;
m_ArraryValue[index]=value;
}
void CDrawLinearGauge::SetFrame(int index,COLORREF valueframeColor,COLORREF valuebkColor)
{
m_valueframeColor = valueframeColor;
m_valuebkColor = valuebkColor;
}
void CDrawLinearGauge::SetFrameValue(int index,long value)
{
m_ArraryValue[index]=value;
}
long CDrawLinearGauge::GetValue(int index)
{
return m_ArraryValue[index];
}
void CDrawLinearGauge::DrawValueFrame(HDC hdc)
{
CRect rect = m_frameRect;
RECT rc= m_frameRect;
long lTemp=0;
if(m_Style == 1)//1標尺
{
if(m_Orientation == 0)//0:Horizontal
{
for(long i=0;i<m_ArraryValue.GetSize();i++)
{
lTemp = m_ArraryValue[i]-m_iMin;
if(lTemp<=0) lTemp=0;
long x = rect.left + lTemp * rect.Width() / (m_iMax-m_iMin);
if(m_ArraryValue.GetSize()==1)
{
HPEN hPen = CreatePen(PS_SOLID,1,m_valueframeColor);
HBRUSH hBrush = CreateSolidBrush(m_valuebkColor);
SelectObject(hdc,hPen);
FillRect (hdc, &CRect(rect.left, rect.top, x, rect.bottom), hBrush) ;
DeleteObject (hBrush);
DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))) ;
}
}
}
else if(m_Orientation == 1)//1:Vertical
{
for(long i=0;i<m_ArraryValue.GetSize();i++)
{
//m_value = m_value-m_iMin;
//m_ArraryValue[i] = m_ArraryValue[i]-m_iMin;
lTemp = m_ArraryValue[i]-m_iMin;
if(lTemp<=0) lTemp=0;
long y=0;
if((m_iMax-m_iMin)<=0)
{
y = rect.bottom - lTemp * rect.Height() / 1;
}
else
{
y = rect.bottom - lTemp * rect.Height() / (m_iMax-m_iMin);
}
HPEN hPen = CreatePen(PS_SOLID,1,m_valueframeColor);
HBRUSH hBrush = CreateSolidBrush(m_valuebkColor);
SelectObject(hdc,hPen);
rc.left = rect.left;
rc.top = y;
rc.right = rect.right;
rc.bottom = rect.bottom;
//FillRect(hdc, &rc,hBrush);
if(y < rect.top)
{
y=rect.top-5;
}
FillRect (hdc, &CRect(rect.left+1, y, rect.right-1, rect.bottom-1), hBrush) ;
DeleteObject (hBrush);
DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))) ;
CString str;
str.Format(_T("%d"),i);
::SetBkMode(hdc,OPAQUE);
::SetBkColor(hdc,RGB(255,255,255));
DrawText(hdc,str,str.GetLength(),CRect(rect.left,y,rect.left+20,y+20), DT_LEFT | DT_SINGLELINE | DT_VCENTER);
/*if(m_ArraryValue.GetSize()==1)
{
HPEN hPen = CreatePen(PS_SOLID,1,m_valueframeColor);
HBRUSH hBrush = CreateSolidBrush(m_valuebkColor);
SelectObject(hdc,hPen);
rc.left = rect.left;
rc.top = y;
rc.right = rect.right;
rc.bottom = rect.bottom;
//FillRect(hdc, &rc,hBrush);
if(y < rect.top)
{
y=rect.top-5;
}
FillRect (hdc, &CRect(rect.left+1, y, rect.right-1, rect.bottom-1), hBrush) ;
DeleteObject (hBrush);
DeleteObject (SelectObject (hdc, GetStockObject (BLACK_PEN))) ;
}
else
{
rc.left = rect.left;
rc.top = y;
rc.right = rect.right;
rc.bottom = rect.bottom;
CString str;
str.Format(_T("%d"),i);
DrawText(hdc,str,str.GetLength(),CRect(rect.left,y,rect.left+20,y+20), DT_LEFT | DT_SINGLELINE | DT_VCENTER);
}*/
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -