📄 quxianview.cpp
字号:
// quxianView.cpp : implementation of the CQuxianView class
//
#include "stdafx.h"
#include "quxian.h"
#include "quxianDoc.h"
#include "quxianView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CString str_hex1=_T("IDB_BITMAP5");
/////////////////////////////////////////////////////////////////////////////
// CQuxianView
IMPLEMENT_DYNCREATE(CQuxianView, CView)
BEGIN_MESSAGE_MAP(CQuxianView, CView)
//{{AFX_MSG_MAP(CQuxianView)
ON_COMMAND(IDM_HT, OnHt)
ON_COMMAND(IDM_CCD, OnCcd)
ON_WM_CREATE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CQuxianView construction/destruction
CQuxianView::CQuxianView()
{
// TODO: add construction code here
}
CQuxianView::~CQuxianView()
{
}
/////////////////////////////////////////////////////////////////////////////
// CQuxianView drawing
volatile IOPreg *v_pIOPRegs;
volatile ADCreg *v_pADCRegs;
void CQuxianView::OnDraw(CDC* pDC)
{
//初始化坐标值,一般从数据库取得。这里为了示例方便取得比较简单
if (k)
{
CClientDC dc(this); // device context for painting
CRect rect;
GetClientRect(&rect);
// TODO: Add your message handler code here
CBitmap bmp;
bmp.LoadBitmap(IDB_BITMAP5);
//得到图片信息
BITMAP bmpInfo;
bmp.GetBitmap(&bmpInfo);
CDC dcMemory;
dcMemory.CreateCompatibleDC(&dc);
CBitmap *pOldBmp=dcMemory.SelectObject(&bmp);
StretchBlt(
dc,// handle to destination device context
0, // x-coordinate of upper-left corner of dest. rectangle
0, // y-coordinate of upper-left corner of dest. rectangle
rect.Width(), // width of destination rectangle
rect.Height(), // height of destination rectangle
dcMemory.m_hDC, // handle to source device context
0, // x-coordinate of upper-left corner of source rectangle
0, // y-coordinate of upper-left corner of source rectangle
bmpInfo.bmWidth, // width of source rectangle
bmpInfo.bmHeight, // height of source rectangle
SRCCOPY // raster operation code
);
dcMemory.SelectObject(pOldBmp);
}
if(bShowLineA)
{
//AfxMessageBox(_T("stqx"));
bShowLineA=false;
const int num=1024;
int i,s;
float initX[num];
float initY[num];
for(s=0;s<num;s++)
{
initY[s]=p[s];
initX[s]=s;
}
//分别取得X和Y最大值,最小值
float maxX=initX[0];
float minX=initX[0];
float maxY=initY[0];
float minY=initY[0];
for(i=0;i<num;i++) //计算最大最小值
{
if(initY[i]>maxY)
maxY=initY[i];
//if(initY[i]<minY)
// minY=initY[i];
}
minY=0;///////////当Y值有变化时去掉这个加上上边的
//maxY=1024;
minX=0;
maxX=1024;
//如果原点必须在X轴上,加上下面2行,否则注释掉
// if(minX>0)
// minX=0;
//如果原点必须在Y轴上,加上下面2行,否则注释掉
// if(minY>0)
//minY=0;
//确定图象显示大小
int width=500;
int height=400;
//确定坐标图四周预留的空白大小
const int mytop=10;
const int mybottom=40;
const int myleft=80;
const int myright=50;
//确定X,Y轴每单位显示宽度
float intervalX=(width-myleft-myright)/(maxX-minX);
float intervalY=(height-mybottom-mytop)/(maxY-minY);
//绘制曲线。由于绘图坐标的Y轴是向下延升,所以这里每个点的Y值是用
//图象高度减去y值大小。
for(i=0;i<(num-1);i++)
{
pDC->MoveTo(int(myleft+(initX[i]-minX)*intervalX),
int(height-(mybottom+(initY[i]-minY)*intervalY)));
pDC->LineTo(int(myleft+(initX[i+1]-minX)*intervalX),
int(height-(mybottom+(initY[i+1]-minY)*intervalY)));
}
//绘制X,Y轴
//X轴从图形区域最左端到最右端
float bottomY=0;
float leftX=0;
//bottomY表示X轴的y值,leftX表示Y轴的x值
if(minY>0)
bottomY=minY;
if(minX>0)
leftX=minX;
pDC->MoveTo(int(myleft),int(height-(mybottom+(bottomY-minY)*intervalY)));
pDC->LineTo(int(width-myright),int(height-(mybottom+(bottomY-minY)*intervalY)));
//Y轴从图形区域最底端到最顶端
pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-mybottom));
pDC->LineTo(int(myleft+(leftX-minX)*intervalX),int(mytop));
//确定显示刻度个数
const int count=5;
//确定每个显示刻度之间的宽度
float spaceX=(width-myleft-myright)/count;
float spaceY=(height-mybottom-mytop)/count;
//绘制刻度和刻度值
CString str;
//X轴
CString txtsx[20];
for(i=0;i<=count;i++)
{
//str.Format("%.1f",minX+i*(maxX-minX)/count);
pDC->MoveTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY)));
pDC->LineTo(int(myleft+spaceX*i),int(height-(mybottom+(bottomY-minY)*intervalY+5)));
str.Format(_T(" %.1f"), minX+i*(maxX-minX)/count);
txtsx[i]=(_T("%s"), (LPCTSTR) str);
pDC->DrawText(txtsx[i],CRect((myleft+spaceX*i-20),(height-(mybottom+(bottomY-minY)*intervalY-5)),(myleft+spaceX*i+20),(height-(mybottom+(bottomY-minY)*intervalY-20))),DT_CENTER); // x
}
//Y轴
CString txtsy[20];
for(i=0;i<=count;i++)
{
pDC->MoveTo(int(myleft+(leftX-minX)*intervalX),int(height-(mybottom+spaceY*i)));
pDC->LineTo(int(myleft+(leftX-minX)*intervalX+5),int(height-(mybottom+spaceY*i)));
str.Format(_T(" %.1f"), minY+i*(maxY-minY)/count);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -