⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 kztlist.cpp

📁 ISO9000质量管理小程序
💻 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 + -