?? kzt.cpp
字號:
// Kzt.cpp : implementation file
//
#include "stdafx.h"
#include "Ex07b.h"
#include "Kzt.h"
#include "Kztsplitter.h"
#include "KztList.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CKzt
IMPLEMENT_DYNCREATE(CKzt, CFormView)
CKzt::CKzt()
: CFormView(CKzt::IDD)
{
//{{AFX_DATA_INIT(CKzt)
m_gsj = 0.0f;
//}}AFX_DATA_INIT
}
CKzt::~CKzt()
{
}
void CKzt::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CKzt)
DDX_Text(pDX, IDC_EDIT1, m_gsj);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CKzt, CFormView)
//{{AFX_MSG_MAP(CKzt)
ON_BN_CLICKED(IDC_KZTADD, OnKztadd)
ON_BN_CLICKED(IDC_KZTTONGJI, OnKzttongji)
ON_BN_CLICKED(IDC_XSKZT, OnXskzt)
ON_BN_CLICKED(IDC_KZTXG, OnKztxg)
ON_BN_CLICKED(IDC_KZTNEXT, OnKztnext)
ON_BN_CLICKED(IDC_KINSERT, OnKinsert)
ON_BN_CLICKED(IDC_KREMOVE, OnKremove)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, OnFilePrintPreview)
ON_COMMAND(ID_FILE_PRINT, OnFilePrint)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CKzt diagnostics
#ifdef _DEBUG
void CKzt::AssertValid() const
{
CFormView::AssertValid();
}
void CKzt::Dump(CDumpContext& dc) const
{
CFormView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CKzt message handlers
void CKzt::OnKztadd()
{
// TODO: Add your control notification handler code here
UpdateData();
CSbtDoc *pDoc=GetDocument();
ASSERT_VALID(pDoc);
CGcsj * pGcsj;
pGcsj=new CGcsj(m_gsj);
pDoc->m_gcdataList.AddTail(pGcsj);
pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
pDoc->UpdateAllViews(this);
//控制控件的允許,
CWnd *m_Wnd=NULL;
m_Wnd=GetDlgItem(IDC_KZTTONGJI);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KZTNEXT);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KZTXG);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KINSERT);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KREMOVE);
m_Wnd->EnableWindow();
}
#ifdef _DEBUG
CSbtDoc * CKzt::GetDocument()
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSbtDoc)));
return (CSbtDoc*)m_pDocument;
}
#endif
void CKzt::OnInitialUpdate()
{
CFormView::OnInitialUpdate();
CSbtDoc *pDoc=GetDocument();
ASSERT_VALID(pDoc);
CRect rectb(50,100,80,130);
CButtonST button1;
button1.Create("sldk",BS_AUTOCHECKBOX,rectb,this,5);
button1.ShowWindow(SW_SHOW);
int m=pDoc->m_gcdataList.GetCount();
if (m!=0)
{
CGcsj *pGcsj=pDoc->m_gcdataList.GetAt(pDoc->gccurPos);
m_gsj=pGcsj->m_fgcsj;
//成員變量的數據傳給控制ID,在對話框中顯示數據
UpdateData(false);
pDoc->m_gcdataList.GetNext(pDoc->gccurPos);
if(pDoc->gccurPos==NULL)
pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
// 為進行下一輪循環做準備
//控制控件的允許,
CWnd *m_Wnd=NULL;
m_Wnd=GetDlgItem(IDC_KZTTONGJI);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KZTNEXT);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KZTXG);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KINSERT);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KREMOVE);
m_Wnd->EnableWindow();
}
// TODO: Add your specialized code here and/or call the base class
//創建豐富的按鈕
//顯示圖形/
m_btnXstuxing.SubclassDlgItem(IDC_XSKZT,this);
m_btnXstuxing.SetIcon(IDI_XSTUXING1,IDI_XSTUXING2);
m_btnXstuxing.SetActiveFgColor(RGB(255,0,0));
m_btnXstuxing.SetBtnCursor(IDC_HAND);
//添加數據
m_btnAdd.SubclassDlgItem(IDC_KZTADD,this);
m_btnAdd.SetIcon(IDI_ADD2,IDI_ADD1);
m_btnAdd.SetActiveFgColor(RGB(255,0,0));
m_btnAdd.SetBtnCursor(IDC_HAND);
//數據統計
m_btnTongji.SubclassDlgItem(IDC_KZTTONGJI,this);
m_btnTongji.SetIcon(IDI_TONGJI1,IDI_TONGJI2);
m_btnTongji.SetActiveFgColor(RGB(255,0,0));
m_btnTongji.SetBtnCursor(IDC_HAND);
//修改數據
m_btnXg.SubclassDlgItem(IDC_KZTXG,this);
m_btnXg.SetIcon(IDI_XG1,IDI_XG2);
m_btnXg.SetActiveFgColor(RGB(255,0,0));
m_btnXg.SetBtnCursor(IDC_HAND);
//下一數據
m_btnNext.SubclassDlgItem(IDC_KZTNEXT,this);
m_btnNext.SetIcon(IDI_NEXT1,IDI_NEXT2);
m_btnNext.SetActiveFgColor(RGB(255,0,0));
m_btnNext.SetBtnCursor(IDC_HAND);
//插入數據
m_btnInsert.SubclassDlgItem(IDC_KINSERT,this);
m_btnInsert.SetIcon(IDI_INSERT1,IDI_INSERT2);
m_btnInsert.SetActiveFgColor(RGB(255,0,0));
m_btnInsert.SetBtnCursor(IDC_HAND);
//刪除數據
m_btnDel256.SubclassDlgItem(IDC_KREMOVE, this);
m_btnDel256.SetIcon(IDI_DEL1, IDI_DEL2);
m_btnDel256.SetActiveFgColor(RGB(255,0,0));
m_btnDel256.SetBtnCursor(IDC_HAND);
}
void CKzt::OnKzttongji()
{
// TODO: Add your control notification handler code here
CSbtDoc * pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_kztdataList.RemoveAll();
if(pDoc->m_gcdataList.GetCount()%5!=0)
{
AfxMessageBox("請輸入5的倍數個數據");
return;
}
//統計控制圖分組數據Xi,R
int i=0;
float zleiji=0;//求總的累計量,便于求XI平均值的平均值即pDoc->k_xcl
float xleiji=0;
float rleiji=0;
POSITION pos=pDoc->m_gcdataList.GetHeadPosition();
// POSITION pos2=pDoc->m_kztdataList.GetHeadPosition();
while (pos!=NULL)
{
float max=-10000;
float min=10000;
float leiji=0;
do
{
i++;
CGcsj *pGcsj=pDoc->m_gcdataList.GetNext(pos);
leiji=leiji+pGcsj->m_fgcsj;
if (max<pGcsj->m_fgcsj)
max=pGcsj->m_fgcsj;
if (min>pGcsj->m_fgcsj)
min=pGcsj->m_fgcsj;
}
while(i%5!=0);
CKzttjsj *pKzttjsj ;
pKzttjsj=new CKzttjsj();
pKzttjsj->k_leiji=leiji;
pKzttjsj->k_R=max-min;
pKzttjsj->k_middle=leiji/5;
pDoc->m_kztdataList.AddTail(pKzttjsj);
xleiji=xleiji+pKzttjsj->k_middle;
rleiji=rleiji+pKzttjsj->k_R;
}
//統計 XUCL,K_XCL,K_XLCL
pDoc->k_xcl=xleiji*5/i;
pDoc->k_Rcl=rleiji*5/i;
pDoc->k_xucl=pDoc->k_xcl+pDoc->k_A2*pDoc->k_Rcl;
pDoc->k_xlcl=pDoc->k_xcl-pDoc->k_A2*pDoc->k_Rcl;
pDoc->k_Rucl=pDoc->k_D4*pDoc->k_Rcl;
pDoc->UpdateAllViews(this);
//控制控件的允許,
CWnd *m_Wnd=NULL;
m_Wnd=GetDlgItem(IDC_XSKZT);
m_Wnd->EnableWindow();
}
void CKzt::OnXskzt()
{
// TODO: Add your control notification handler code here
CSbtDoc * pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->b_xskzt=true;
pDoc->UpdateAllViews(this);
}
void CKzt::OnKztxg()
{
// TODO: Add your control notification handler code here
UpdateData();
CSbtDoc * pDoc=GetDocument();
ASSERT_VALID(pDoc);
pDoc->m_gcdataList.GetPrev(pDoc->gccurPos);
if(pDoc->gccurPos==NULL)
pDoc->gccurPos=pDoc->m_gcdataList.GetTailPosition();
CGcsj *pGcsj;
pGcsj=pDoc->m_gcdataList.GetAt(pDoc->gccurPos);
pGcsj->m_fgcsj=m_gsj;
pDoc->m_gcdataList.GetNext(pDoc->gccurPos);
if(pDoc->gccurPos==NULL)
pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
pDoc->UpdateAllViews(this);
}
void CKzt::OnKztnext()
{
// TODO: Add your control notification handler code here
CSbtDoc *pDoc=GetDocument();
ASSERT_VALID(pDoc);
if(pDoc->gccurPos!=NULL) //
{
CGcsj *pGcsj=pDoc->m_gcdataList.GetAt(pDoc->gccurPos);
m_gsj=pGcsj->m_fgcsj;
//成員變量的數據傳給控制ID,在對話框中顯示數據
UpdateData(false);
pDoc->m_gcdataList.GetNext(pDoc->gccurPos);
if(pDoc->gccurPos==NULL)
pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
// 為進行下一輪循環做準備
}
else
MessageBox("當前列表中沒有數據!");
pDoc->UpdateAllViews(this);
}
void CKzt::OnKinsert()
{
// TODO: Add your control notification handler code here
UpdateData();
CSbtDoc * pDoc=GetDocument();
ASSERT_VALID(pDoc);
CGcsj * pGcsj;
pGcsj=new CGcsj(m_gsj);
pDoc->m_gcdataList.InsertBefore(pDoc->gccurPos,pGcsj);
pDoc->SetModifiedFlag();
pDoc->UpdateAllViews(this);
}
void CKzt::OnKremove()
{
// TODO: Add your control notification handler code here
CSbtDoc * pDoc=GetDocument();
ASSERT_VALID(pDoc);
CGcsj *pGcsj=pDoc->m_gcdataList.GetPrev(pDoc->gccurPos);
if(pDoc->gccurPos==NULL)
pDoc->gccurPos=pDoc->m_gcdataList.GetTailPosition();
pDoc->m_gcdataList.RemoveAt(pDoc->gccurPos);
pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
pDoc->SetModifiedFlag();
pDoc->UpdateAllViews(this);
}
void CKzt::OnFilePrintPreview()
{
// TODO: Add your command handler code here
CKztsplitter * pFrame=(CKztsplitter*)GetParentFrame();
CKztList* pList=(CKztList*)(pFrame->m_splitterWnd.GetPane(0,1));
::SendMessage(pList->m_hWnd,WM_COMMAND,ID_FILE_PRINT_PREVIEW,NULL);
}
void CKzt::OnFilePrint()
{
CKztsplitter* pFrame=(CKztsplitter*)GetParentFrame();
CKztList* pList=(CKztList*)(pFrame->m_splitterWnd.GetPane(0,1));
::SendMessage(pList->m_hWnd,WM_COMMAND,ID_FILE_PRINT,NULL);
}
void CKzt::CalcWindowRect(LPRECT lpClientRect, UINT nAdjustType)
{
// TODO: Add your specialized code here and/or call the base class
CFormView::CalcWindowRect(lpClientRect, nAdjustType);
}
BOOL CKzt::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message==WM_KEYDOWN&&pMsg->wParam==VK_RETURN&&pMsg->hwnd==((GetDlgItem(IDC_EDIT1))->m_hWnd))
{
UpdateData();
CSbtDoc *pDoc=GetDocument();
ASSERT_VALID(pDoc);
CGcsj * pGcsj;
pGcsj=new CGcsj(m_gsj);
pDoc->m_gcdataList.AddTail(pGcsj);
pDoc->gccurPos=pDoc->m_gcdataList.GetHeadPosition();
pDoc->UpdateAllViews(this);
//控制控件的允許,
CWnd *m_Wnd=NULL;
m_Wnd=GetDlgItem(IDC_KZTTONGJI);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KZTNEXT);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KZTXG);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KINSERT);
m_Wnd->EnableWindow();
m_Wnd=GetDlgItem(IDC_KREMOVE);
m_Wnd->EnableWindow();
CEdit * pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);
pEdit->SetSel(0,-1,true);
}
return CFormView::PreTranslateMessage(pMsg);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -