?? scope.cpp
字號:
// scope.cpp : implementation file
//
#include "stdafx.h"
#include "蓄電池充放電檢測系統(tǒng).h"
#include "scope.h"
#include "MemDC.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// Cscope
Cscope::Cscope()
{
m_penWidth=1; //曲線高度
m_ValueColor=RGB(255,255,0); //曲線顏色
m_BackColor=RGB(0,0,0); //控件背景顏色
m_LineColor=RGB(0,255,0); //刻度顏色
m_malkdColor=RGB(0,64,0); //小刻度顏色
m_MaxX=20; //X最大值
m_MaxY=5;//Y最大值
valuejs=0;
//fData=new float [1024]; //數(shù)組分配內(nèi)存
//ZeroMemory (fData,sizeof(fData)); // 初始化數(shù)據(jù)為0
}
Cscope::~Cscope()
{
}
BEGIN_MESSAGE_MAP(Cscope, CStatic)
//{{AFX_MSG_MAP(Cscope)
ON_WM_PAINT()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// Cscope message handlers
void Cscope::OnPaint()
{
// TODO: Add your message handler code here
CPaintDC dc(this); // device context for painting
GetClientRect(&m_controlRect); //獲得控件客戶區(qū)矩形大小
wzx=m_controlRect.left+45;
wzy=m_controlRect.bottom-40;
wzwith=m_controlRect.Width()-wzx; //寬度
wzwith=wzwith/40*40;//寬度取整
oldx=wzx;oldy=wzy;
if((wzwith%10)>0)wzwith=wzwith/10*10;//寬度取整
wzright=wzy-20;//高度
wzright=wzright/20*20;//高度取整
//if((wzright%20>0))wzright=wzright/20*20+1;//高度取整
CMemDC m_MemDC(&dc,&m_controlRect);// 創(chuàng)建內(nèi)存 DC
//繪制背景顏色邊框顏色
CPen m_temppen; //用來畫邊框的筆,顏色(m_borderColor)
CBrush m_tempbrush; //用來畫背景的刷子,顏色(m_backgroundcolor)
m_temppen.CreatePen(PS_SOLID,3,m_BackColor);
m_tempbrush.CreateSolidBrush(m_BackColor);
CPen * pOldPen=m_MemDC.SelectObject(&m_temppen);
CBrush * pOldBrush=m_MemDC.SelectObject(&m_tempbrush);
m_MemDC.Rectangle(&m_controlRect);//繪制控件背景及邊框
m_MemDC.SelectObject(pOldPen);
m_MemDC.SelectObject(pOldBrush);
m_temppen.DeleteObject();
m_tempbrush.DeleteObject();
Drawkd(&m_MemDC);//畫刻度
DrawVale(&m_MemDC);//繪制曲線
}
void Cscope::Drawkd(CDC *pDC)//畫刻度
{
CFont myFont;//字體
myFont.CreatePointFont(90,"宋體");//目前使用的字體
CFont *OldFont=pDC->SelectObject(&myFont); //設(shè)定當(dāng)前字體
pDC->SetTextColor(m_LineColor);//文字顏色=刻度色
pDC->SetBkColor(m_BackColor); //文字背景色=背景色
pDC->SetBkMode(OPAQUE);//如用特殊文字背景色將參數(shù)改為OPAQUE 如與控件背景相同用TRANSPARENT
CPen m_drawNumPen,m_drawNumPen1;//定義畫筆
m_drawNumPen.CreatePen(PS_SOLID,m_penWidth,m_LineColor);
m_drawNumPen1.CreatePen(PS_SOLID,m_penWidth,m_malkdColor);
CPen * poldPen = (CPen *)pDC->SelectObject(&m_drawNumPen);
pDC->MoveTo(wzx+1,wzy+1);
pDC->LineTo(wzx+wzwith+1,wzy+1);//上一行到這里畫橫線
pDC->MoveTo(wzx,wzy);
pDC->LineTo(wzx,wzy-wzright);//上一行到這里畫豎線
//畫X刻度
int js=0,a;CString strtemp;
for(a=0;a<((wzwith)/10)+1;a++)
{
pDC->MoveTo(wzx+(10*a),wzy+1);
if (a%4==0)
{
strtemp.Format("%2d",js*10);
pDC->LineTo(wzx+(10*a),wzy+5);
pDC->TextOut(wzx+(10*a)-8,wzy+12,strtemp);
js++;
}
if(a%48==0)
{
pDC->LineTo(wzx+(10*a),wzy+8);
}
pDC->LineTo(wzx+(10*a),wzy+4);
}
pDC->TextOut(wzx+(10*a)-48,wzy-15,"(分鐘)");
//畫Y刻度
js=0;float aaa=3;
for(a=0;a<((wzright)/10+1);a++)
{
pDC->MoveTo(wzx-1,wzy-10*a+1);
if (a%10==0)//畫Y刻度數(shù)值
{
strtemp.Format("%2.2f",aaa);
pDC->TextOut(wzx-35,wzy-10*a-4,strtemp);
aaa+=0.5;
}
if (a%10==0)
{
pDC->LineTo(wzx-8,wzy-10*a+1);
}
else
{
pDC->LineTo(wzx-4,wzy-10*a+1);
}
}
pDC->TextOut(wzx-40,wzy-10*a-10,"電壓(V)");
//畫Y方向小線
CPen * poldPen1 = (CPen *)pDC->SelectObject(&m_drawNumPen1);
for(a=1;a<((wzwith-10)/10);a++)
{
pDC->MoveTo(wzx+(40*a),wzy);
pDC->LineTo(wzx+(40*a),wzy-wzright+1);
}
//畫X方向小線
for(a=1;a<((wzright)/20+1);a++)
{
pDC->MoveTo(wzx+1,wzy-(20*a)+1);
pDC->LineTo(wzx+1+wzwith,wzy-(20*a)+1);
}
pDC->SelectObject(poldPen);//恢復(fù)畫筆
m_drawNumPen.DeleteObject();//刪除畫筆
}
void Cscope::SetMaxKD(int x,int y)//設(shè)置XY的刻度最大值
{
m_MaxX=x;m_MaxY=y;
Invalidate();//刷新
}
void Cscope::DrawVale(CDC *pDC) //畫曲線
{
float a;
CPen m_drawNumPen;//定義畫筆
m_drawNumPen.CreatePen(PS_SOLID,m_penWidth,m_ValueColor);
CPen * poldPen = (CPen *)pDC->SelectObject(&m_drawNumPen);
//初始化起點位置
a=fData[0];
value=(int)(a*200);
oldx=wzx+1;oldy=wzy-value;
//開始畫線
if(valuejs>0)
{
for (int i=1;i<valuejs;i++)
{
a=fData[i-1];
value=(int)(a*200);
pDC->MoveTo(oldx,oldy);
pDC->LineTo(wzx+i,wzy-value-1);
oldx=wzx+i;
oldy=wzy-value;
}
}
pDC->SelectObject(poldPen);//恢復(fù)畫筆
m_drawNumPen.DeleteObject();//刪除畫筆
}
void Cscope::SetBackColor(COLORREF clr) //設(shè)置背景顏色
{
m_BackColor=clr;
Invalidate();//刷新
}
void Cscope::SetkdColor(COLORREF clr) //設(shè)置刻度顏色
{
m_LineColor=clr;
Invalidate();//刷新
}
void Cscope::SetValueColor(COLORREF clr) //設(shè)置曲線顏色
{
m_ValueColor=clr;
Invalidate();//刷新
}
void Cscope::SetmalkdColor(COLORREF clr) //設(shè)置小刻度顏色
{
m_malkdColor=clr;
Invalidate();//刷新
}
void Cscope::SetVale(float xx)
{
if(xx<0)xx=0;//防止出現(xiàn)負曲線
fData[valuejs]=xx;
// CClientDC dc(this);//獲取當(dāng)前控件句柄
Invalidate();//刷新
if(valuejs>wzwith)
{
valuejs=0;return;
}
valuejs++;
}
void Cscope::OnMouseMove(UINT nFlags, CPoint point)
{
CStatic::OnMouseMove(nFlags, point);
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -