?? kztlist.cpp
字號:
// KztList.cpp : implementation file
//
#include "stdafx.h"
#include "Ex07b.h"
#include "KztList.h"
#include <afxdlgs.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CKztList
IMPLEMENT_DYNCREATE(CKztList, CScrollView)
CKztList::CKztList()
{
}
CKztList::~CKztList()
{
}
BEGIN_MESSAGE_MAP(CKztList, CScrollView)
//{{AFX_MSG_MAP(CKztList)
// ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview) //Attention here!!!!
//}}AFX_MSG_MAP
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint) //Attention here!!!!
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint) //Attention here!!!!
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview) //Attention here!!!!
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKztList drawing
void CKztList::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx =0;
sizeTotal.cy = 0;
SetScrollSizes(MM_TEXT, sizeTotal);
}
void CKztList::OnDraw(CDC* pDC)
{
CSbtDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code here
pDC->TextOut(0,10,"組號");
pDC->TextOut(150,0,"測定值");
pDC->TextOut(350,10,"累計值");
pDC->TextOut(420,10,"平均值");
pDC->TextOut(490,10,"極差");
pDC->TextOut(55,20,"X1");
pDC->TextOut(115,20,"X2");
pDC->TextOut(175,20,"X3");
pDC->TextOut(235,20,"X4");
pDC->TextOut(295,20,"X5");
char str[64];
int i=1;
int j;
POSITION pos=pDoc->m_gcdataList.GetHeadPosition();
POSITION pos2=pDoc->m_kztdataList.GetHeadPosition();
while (pos!=NULL)//&&pos2!=NULL)
{
j=40;
while(pos!=NULL&&j<300)
{
CGcsj *pGcsj=pDoc->m_gcdataList.GetNext(pos);
if(pos==pDoc->gccurPos||
(pos==NULL&&pDoc->gccurPos==pDoc->m_gcdataList.GetHeadPosition()))
pDC->TextOut(j-15,20*(i+1),"=>");
sprintf(str,"%d",i);
pDC->TextOut(10,20*(i+1),str);
sprintf(str,"%6.1f",pGcsj->m_fgcsj);
pDC->TextOut(j,20*(i+1),str);
j=j+60;
}
if (pos2!=NULL)
{
CKzttjsj * pKzttjsj=pDoc->m_kztdataList.GetNext(pos2);
sprintf(str,"%6.1f",pKzttjsj->k_leiji);
pDC->TextOut(350,20*(i+1),str);
sprintf(str,"%6.1f",pKzttjsj->k_middle);
pDC->TextOut(420,20*(i+1),str);
sprintf(str,"%6.1f",pKzttjsj->k_R);
pDC->TextOut(490,20*(i+1),str);
}
i++;
}
/* CSize sizeTotal;
sizeTotal.cx =700;
sizeTotal.cy = i*20+20;
SetScrollSizes(MM_TEXT, sizeTotal);
*/
int Hsx=100;
int Hsy=20*(i+1)+500;
if (pDoc->b_xskzt==true)
{
//畫圖
//1 畫坐標
int Hex=Hsx+80+pDoc->m_kztdataList.GetCount()*15;
int Hey=Hsy;
int Zsx=Hsx;
int Zsy=Hsy;
int Zex=Zsx;
int Zey=Hsy-400;
CPen pen1;
pen1.CreatePen(PS_ENDCAP_ROUND,2,RGB(255,128,128));
pDC->SelectObject(&pen1);
pDC->MoveTo(Hsx,Hsy);
pDC->LineTo(Hex,Hey);
pDC->MoveTo(Zsx,Zsy);
pDC->LineTo(Zex,Zey);
//畫坐標的箭頭
pDC->MoveTo(Hex,Hey);
pDC->LineTo(Hex-10,Hey-3);
pDC->MoveTo(Hex,Hey);
pDC->LineTo(Hex-10,Hey+3);
pDC->MoveTo(Zex,Zey);
pDC->LineTo(Zex-3,Zey+10);
pDC->MoveTo(Zex,Zey);
pDC->LineTo(Zex+3,Zey+10);
//寫橫坐標上的組號
int m=0;
int Hsj=Hsx;
while (m<=pDoc->m_kztdataList.GetCount())
{
m++;
if (m%5==0)
{
sprintf(str,"%d",m);
pDC->TextOut(Hsj+m*15-5,Hsy+5,str);
pDC->MoveTo(Hsj+m*15,Hsy);
pDC->LineTo(Hsj+m*15,Hsy-4);
}
pDC->TextOut(Hex-15,Hey+5,"組號");
}
//畫幾條水平線
int Zxcl=Zsy-250;
int Zxucl=Zxcl-50;
int Zxlcl=Zxcl+50;
int ZRcl=Zsy-80;
int ZRucl=ZRcl-50;
CString aa;
aa.Format("%6.2f",pDoc->k_xcl);
pDC->MoveTo(Zex,Zxcl);
pDC->LineTo(Hex,Zxcl);
pDC->TextOut(Hex,Zxcl-10,"CL=");
// sprintf(str,"6.2f",pDoc->k_xcl);
aa.Format("%6.2f",pDoc->k_xcl);
pDC->TextOut(Hex+30,Zxcl-10,aa);
pDC->TextOut(Hsx-80,Zxcl-10,"X圖");
pDC->MoveTo(Zex,ZRcl);
pDC->LineTo(Hex,ZRcl);
pDC->TextOut(Hex,ZRcl-10,"CL=");
// sprintf(str,"6.2f",pDoc->k_Rcl);
aa.Format("%6.2f",pDoc->k_Rcl);
pDC->TextOut(Hex+25,ZRcl-10,aa);
pDC->TextOut(Hsx-80,ZRcl-10,"R圖");
CPen pen2;
pen2.CreatePen(PS_DOT,1,RGB(255,128,128));
pDC->SelectObject(&pen2);
pDC->MoveTo(Zex,Zxucl);
pDC->LineTo(Hex,Zxucl);
pDC->TextOut(Hex,Zxucl-10,"UCL=");
// sprintf(str,"6.2f",pDoc->k_xucl);
aa.Format("%6.2f",pDoc->k_xucl);
pDC->TextOut(Hex+35,Zxucl-10,aa);
pDC->MoveTo(Zex,Zxlcl);
pDC->LineTo(Hex,Zxlcl);
pDC->TextOut(Hex,Zxlcl-10,"LCL=");
//sprintf(str,"6.2f",pDoc->k_xlcl);
aa.Format("%6.2f",pDoc->k_xlcl);
pDC->TextOut(Hex+30,Zxlcl-10,aa);
pDC->MoveTo(Zex,ZRucl);
pDC->LineTo(Hex,ZRucl);
pDC->TextOut(Hex,ZRucl-10,"UCL=");
// sprintf(str,"6.2f",pDoc->k_Rucl);
aa.Format("%6.2f",pDoc->k_Rucl);
pDC->TextOut(Hex+35,ZRucl-10,aa);
//sprintf(str,"6.2f",pDoc->k_Rucl);
//pDC->TextOut(30,200,str);
//寫縱坐標上的數據
float leijia=(pDoc->k_xcl-pDoc->k_xlcl)*0.5;
float lin=pDoc->k_xlcl-leijia;
int Zlin=Zxlcl+25;
pDC->SelectObject(&pen1);
for (int n=0;n<7;n++)
{
sprintf(str,"%4.1f",lin);
pDC->TextOut(Zsx-35,Zlin-10,str);
pDC->MoveTo(Zsx,Zlin);
pDC->LineTo(Zsx-4,Zlin);
lin=lin+leijia;
Zlin=Zlin-25;
}
leijia=(pDoc->k_Rucl-pDoc->k_Rcl)*.5;
lin=pDoc->k_Rcl-2*leijia;
Zlin=ZRcl+50;
for ( n=0;n<5;n++)
{
sprintf(str,"%4.1f",lin);
pDC->TextOut(Zsx-35,Zlin-10,str);
pDC->MoveTo(Zsx,Zlin);
pDC->LineTo(Zsx-4,Zlin);
lin=lin+leijia;
Zlin=Zlin-25;
}
//畫X圖
CPen pen5;
pen5.CreatePen(PS_ENDCAP_ROUND,1,RGB(0,128,128));
pDC->SelectObject(&pen5);
i=1;
float x1=0;
float y1=0;
float x2=0;
float y2=0;
float x3=0;
float y3=0;
float x4=0;
float y4=0;
pos2=pDoc->m_kztdataList.GetHeadPosition();
while (pos2!=NULL)
{
if(i==1)
{
CKzttjsj *pKzttjsj=pDoc->m_kztdataList.GetNext(pos2);
x1=Hsx+i*15;
y1=Zxcl+(pDoc->k_xcl-pKzttjsj->k_middle)*50/(pDoc->k_xucl-pDoc->k_xcl);
CRect rect(x1-1.5,y1-1.5,x1+1.5,y1+1.5);//打點
pDC->Ellipse(&rect);
x3=Hsx+i*15;
y3=ZRcl+(pDoc->k_Rcl-pKzttjsj->k_R)*50/(pDoc->k_Rucl-pDoc->k_Rcl);
CRect rect2(x3-1.5,y3-1.5,x3+1.5,y3+1.5);//打點
pDC->Ellipse(&rect2);
}
i++;
CKzttjsj *pKzttjsj=pDoc->m_kztdataList.GetNext(pos2);
x2=Hsx+i*15;
y2=Zxcl+(pDoc->k_xcl-pKzttjsj->k_middle)*50/(pDoc->k_xucl-pDoc->k_xcl);
CRect rect(x2-1.5,y2-1.5,x2+1.5,y2+1.5);//打點
pDC->Ellipse(&rect);
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
x1=x2;
y1=y2;
x4=Hsx+i*15;
y4=ZRcl+(pDoc->k_Rcl-pKzttjsj->k_R)*50/(pDoc->k_Rucl-pDoc->k_Rcl);
CRect rect3(x4-1.5,y4-1.5,x4+1.5,y4+1.5);//打點
pDC->Ellipse(&rect3);
pDC->MoveTo(x3,y3);
pDC->LineTo(x4,y4);
x3=x4;
y3=y4;
}
}
CSize sizeTotal;
sizeTotal.cx =700;
// sizeTotal.cy = i*20+20;
// SetScrollSizes(MM_TEXT, sizeTotal);
sizeTotal.cy =max((Hsy+50),(i*20+20));
SetScrollSizes(MM_TEXT, sizeTotal);
}
/////////////////////////////////////////////////////////////////////////////
// CKztList diagnostics
#ifdef _DEBUG
void CKztList::AssertValid() const
{
CScrollView::AssertValid();
}
void CKztList::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
#endif //_DEBUG
#ifdef _DEBUG
CSbtDoc * CKztList::GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSbtDoc)));
return (CSbtDoc*)m_pDocument;
}
#endif
/////////////////////////////////////////////////////////////////////////////
// CKztList message handlers
void CKztList::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
CScrollView::OnPrepareDC(pDC, pInfo);
pDC->SetMapMode(MM_ANISOTROPIC);
//轉換坐標映射方式
CSize size = CSize(800, 580);
pDC->SetWindowExt(size);
//確定窗口大小
//得到實際設備每邏輯英寸的像素數量
int xLogPixPerInch=pDC->GetDeviceCaps(LOGPIXELSX);
int yLogPixPerInch = pDC->GetDeviceCaps(LOGPIXELSY);
//得到設備坐標和邏輯坐標的比例
long xExt = (long)size.cx * xLogPixPerInch/96 ;
long yExt = (long)size.cy * yLogPixPerInch/96 ;
pDC->SetViewportExt((int)xExt, (int)yExt);
//確定視口大小
}
void CKztList::OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CScrollView::OnBeginPrinting(pDC, pInfo);
}
void CKztList::OnEndPrinting(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: Add your specialized code here and/or call the base class
CScrollView::OnEndPrinting(pDC, pInfo);
}
BOOL CKztList::OnPreparePrinting(CPrintInfo* pInfo)
{
// TODO: call DoPreparePrinting to invoke the Print dialog box
BOOL b=CView::DoPreparePrinting(pInfo);
return b;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -