📄 curvedynamicdialog.cpp
字号:
// CurveDynamicDialog.cpp : implementation file
//
#include "stdafx.h"
#include "Operat.h"
#include "CurveDynamicDialog.h"
#include "mmsystem.h"
#include "HistoryData.h"
#include <math.h>
#include <afxmt.h>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCurveDynamicDialog dialog
CCurveDynamicFlow m_nCurveDynamicFlow;
CCriticalSection m_nTimerCritSect;
short m_nCurGroupNo=0;
short m_nCount=0;
CCurveDynamicDialog::CCurveDynamicDialog(CWnd* pParent /*=NULL*/)
: CDialog(CCurveDynamicDialog::IDD, pParent)
{
//{{AFX_DATA_INIT(CCurveDynamicDialog)
m_nEditName1 = _T("");
m_nEditName2 = _T("");
m_nEditName3 = _T("");
m_nEditName4 = _T("");
m_nEditCurTime = _T("");
m_nEditUpper1 = _T("");
m_nEditUpper2 = _T("");
m_nEditUpper3 = _T("");
m_nEditUpper4 = _T("");
m_nEditDown1 = _T("");
m_nEditDown2 = _T("");
m_nEditDown3 = _T("");
m_nEditDown4 = _T("");
m_nEditCurAnaval1 = _T("");
m_nEditCurAnaval2 = _T("");
m_nEditCurAnaval3 = _T("");
m_nEditCurAnaval4 = _T("");
//}}AFX_DATA_INIT
}
void CCurveDynamicDialog::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCurveDynamicDialog)
DDX_Control(pDX, IDC_SPINUpper4, m_nSpinUpper4);
DDX_Control(pDX, IDC_SPINUpper3, m_nSpinUpper3);
DDX_Control(pDX, IDC_SPINUpper2, m_nSpinUpper2);
DDX_Control(pDX, IDC_SPINUpper1, m_nSpinUpper1);
DDX_Control(pDX, IDC_SPINDown4, m_nSpinDown4);
DDX_Control(pDX, IDC_SPINDown3, m_nSpinDown3);
DDX_Control(pDX, IDC_SPINDown2, m_nSpinDown2);
DDX_Control(pDX, IDC_SPINDown1, m_nSpinDown1);
DDX_Control(pDX, IDC_LIST1, m_nList);
DDX_Text(pDX, IDC_EDIT_NAME1, m_nEditName1);
DDX_Text(pDX, IDC_EDIT_NAME2, m_nEditName2);
DDX_Text(pDX, IDC_EDIT_NAME3, m_nEditName3);
DDX_Text(pDX, IDC_EDIT_NAME4, m_nEditName4);
DDX_Text(pDX, IDC_EDIT_CURTIME, m_nEditCurTime);
DDX_Text(pDX, IDC_EDIT_UPPER1, m_nEditUpper1);
DDX_Text(pDX, IDC_EDIT_UPPER2, m_nEditUpper2);
DDX_Text(pDX, IDC_EDIT_UPPER3, m_nEditUpper3);
DDX_Text(pDX, IDC_EDIT_UPPER4, m_nEditUpper4);
DDX_Text(pDX, IDC_EDIT_DOWN1, m_nEditDown1);
DDX_Text(pDX, IDC_EDIT_DOWN2, m_nEditDown2);
DDX_Text(pDX, IDC_EDIT_DOWN3, m_nEditDown3);
DDX_Text(pDX, IDC_EDIT_DOWN4, m_nEditDown4);
DDX_Text(pDX, IDC_EDIT_CURANAVAL1, m_nEditCurAnaval1);
DDX_Text(pDX, IDC_EDIT_CURANAVAL2, m_nEditCurAnaval2);
DDX_Text(pDX, IDC_EDIT_CURANAVAL3, m_nEditCurAnaval3);
DDX_Text(pDX, IDC_EDIT_CURANAVAL4, m_nEditCurAnaval4);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCurveDynamicDialog, CDialog)
//{{AFX_MSG_MAP(CCurveDynamicDialog)
ON_WM_DESTROY()
ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
ON_WM_PAINT()
ON_BN_CLICKED(IDC_BUTTONAPPLY, OnButtonapply)
ON_MESSAGE(SPLITLINEXCHANGE_MESSAGE,OnCurveFlowSplitXChange)
ON_BN_CLICKED(IDC_BUTTON_PRINT, OnButtonPrint)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown1, OnDeltaposSPINDown1)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown2, OnDeltaposSPINDown2)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown3, OnDeltaposSPINDown3)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINDown4, OnDeltaposSPINDown4)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper1, OnDeltaposSPINUpper1)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper2, OnDeltaposSPINUpper2)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper3, OnDeltaposSPINUpper3)
ON_NOTIFY(UDN_DELTAPOS, IDC_SPINUpper4, OnDeltaposSPINUpper4)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCurveDynamicDialog message handlers
BOOL CCurveDynamicDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization heren
InitData();
InitCtrl();
InitCurveFlow();
ResetCtrl(0);
ResetCurveFlow(0);
m_nTimeID=timeSetEvent(3000,50,CCurveDynamicDialog::TimeCallbackName,1,TIME_PERIODIC);
ASSERT(m_nTimeID!=0);
// SetWindowPos(NULL,30,50,0,0,TRUE);
this->CenterWindow(NULL);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CCurveDynamicDialog::TimeCallbackName(unsigned int nParm1, unsigned int nParm2, unsigned long nParm3, unsigned long nParm4, unsigned long nParm5)
{
CHistoryData pHistoryData;
CCurveDrawStruct *pCurveDrawStruct;
float nCurAnaval;
time_t nTime;
m_nCount++;
m_nTimerCritSect.Lock();
{
short nIndex=0;
for (int i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
pCurveDrawStruct=m_pCurveDrawStruct+m_nCurGroupNo*MAX_CURVE_NUMPERGROUP+i;
if ((pCurveDrawStruct->nNo<0)||(pCurveDrawStruct->nNo>=MAX_HIST_POINT)) continue;
pHistoryData.GetCurHistData(pCurveDrawStruct->nNo,&nCurAnaval,&nTime);
m_nCurveDynamicFlow.SetPos(nIndex,nCurAnaval,0,nTime);
nIndex++;
}
m_nCurveDynamicFlow.Go();
}
m_nTimerCritSect.Unlock();
}
void CCurveDynamicDialog::OnDestroy()
{
CDialog::OnDestroy();
m_nList.SetCurSel(0);
OnSelchangeList1();
// TODO: Add your mes m_nList.SetCurSel(0);
timeKillEvent(m_nTimeID);
CCurveDrawStruct *pCurveDrawStruct;
for(int i=0;i<MAX_CURVE_GROUP;i++)
for(int j=0;j<MAX_CURVE_NUMPERGROUP;j++)
{
pCurveDrawStruct=m_pCurveDrawStruct+i*MAX_CURVE_NUMPERGROUP+j;
if ((pCurveDrawStruct->nNo>=0)&&(pCurveDrawStruct->nNo<MAX_HIST_POINT))
{
pCurveDrawStruct->nDown=m_nCurDown[i][j];
pCurveDrawStruct->nUpper=m_nCurUpper[i][j];
}
}
}
void CCurveDynamicDialog::InitData()
{
CCurveDrawStruct *pCurveDrawStruct;
for(int i=0;i<MAX_CURVE_GROUP;i++)
for(int j=0;j<MAX_CURVE_NUMPERGROUP;j++)
{
pCurveDrawStruct=m_pCurveDrawStruct+i*MAX_CURVE_NUMPERGROUP+j;
if ((pCurveDrawStruct->nNo>=0)&&(pCurveDrawStruct->nNo<MAX_HIST_POINT))
{
m_nCurDown[i][j]=pCurveDrawStruct->nDown;
m_nCurUpper[i][j]=pCurveDrawStruct->nUpper;
}
}
}
void CCurveDynamicDialog::InitCurveFlow()
{
m_nCurveDynamicFlow.SetBkFrameColor(m_nCurveCommandSet.nBackColor,m_nCurveCommandSet.nFontBackColor);
m_nCurveDynamicFlow.SetPrimCompart(m_nCurveCommandSet.nPrimNumX,m_nCurveCommandSet.nPrimNumY,m_nCurveCommandSet.nPrimWidth,PS_SOLID,m_nCurveCommandSet.nPrimColor);
m_nCurveDynamicFlow.SetSecCompart(m_nCurveCommandSet.nSecondNumX,m_nCurveCommandSet.nSecondNumY,m_nCurveCommandSet.nSecondWidth,PS_SOLID,m_nCurveCommandSet.nSecondColor);
m_nCurveDynamicFlow.SetXId(m_nCurveCommandSet.nTimeCoordNum,m_nCurveCommandSet.nFontColor,m_nCurveCommandSet.nFontSize,m_nCurveCommandSet.nFontName);
m_nCurveDynamicFlow.SetTimePigment(m_nCurveCommandSet.nTimeInterval,m_nCurveCommandSet.nTimePixel);
m_nCurveDynamicFlow.SetSplitLine(PS_SOLID,m_nCurveCommandSet.nIdLineWidth,m_nCurveCommandSet.nIdLineColor);
CRect nRect(0,0,660,420);
m_nCurveDynamicFlow.Create(NULL,NULL,WS_CHILD | WS_BORDER | WS_TABSTOP | WS_VISIBLE,nRect,this,IDC_DYNAMICCURVE_FLOW,NULL);
m_nCurveDynamicFlow.InitCtrl(370,600,10,30,30,20);
m_nTimeID=0;
}
void CCurveDynamicDialog::ResetCurveFlow(short nGroupNo)
{
if ((nGroupNo<0)||(nGroupNo>=MAX_CURVE_GROUP)) return;
short nOldGroupNo=nGroupNo;
if (m_nCurSystem==1) nGroupNo+=MAX_TURBINE_CURVE;
CCurveDrawStruct *pCurveDrawStruct;
float nAnavalArray[MAX_MEMORY_HISTNUM];
time_t nTimeArray[MAX_MEMORY_HISTNUM];
CHistoryData pHistoryData;
AfxGetApp()->BeginWaitCursor();
CTime nTime;
nTime=CTime::GetCurrentTime();
m_nTimerCritSect.Lock();
m_nCurveDynamicFlow.DeleteAllLine();
m_nCurveDynamicFlow.InvalidateCtrl(nTime.GetTime());
short nIndex=0;
for (int i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
pCurveDrawStruct=m_pCurveDrawStruct+(nGroupNo)*MAX_CURVE_NUMPERGROUP+i;
if (pCurveDrawStruct->nNo<0) continue;
m_nCurveDynamicFlow.AddLine(pCurveDrawStruct->nColor,PS_SOLID,pCurveDrawStruct->nWidth,pCurveDrawStruct->nDown,pCurveDrawStruct->nUpper);
short nCount=0;
pHistoryData.GetMemoryHistAnaval(pCurveDrawStruct->nNo,nAnavalArray,nTimeArray,&nCount);
if (nCount>0)
{
m_nCurveDynamicFlow.SetHistoryPos(nIndex,nAnavalArray,nTimeArray,nCount);
m_nCurveDynamicFlow.DrawHistoryData();
m_nCurveDynamicFlow.SetHistoryPos(nIndex,NULL,NULL,0);
}
nIndex++;
}
m_nTimerCritSect.Unlock();
AfxGetApp()->EndWaitCursor();
nGroupNo=nOldGroupNo;
m_nCurGroupNo=nGroupNo;
}
void CCurveDynamicDialog::InitCtrl()
{
CCurveDrawStruct *pCurveDrawStruct;
int i;
if (m_nCurSystem==0) i=0;
else i=MAX_TURBINE_CURVE;
for(;i<MAX_CURVE_GROUP;i++)
{
for(int j=0;j<MAX_CURVE_NUMPERGROUP;j++)
{
pCurveDrawStruct=m_pCurveDrawStruct+i*MAX_CURVE_NUMPERGROUP+j;
if (pCurveDrawStruct->nNo>=0)
{
m_nList.AddString(m_nCurveGroupName[i]);
break;
}
}
if (j==MAX_CURVE_NUMPERGROUP) break;
}
//for(i=0;i<MAX_CURVE_GROUP;i++) m_nGroupName[i].Empty();
m_nList.SetCurSel(0);
m_nDownArray[0]=&m_nEditDown1;
m_nDownArray[1]=&m_nEditDown2;
m_nDownArray[2]=&m_nEditDown3;
m_nDownArray[3]=&m_nEditDown4;
/*
m_nDownArray[4]=&m_nEditDown5;
m_nDownArray[5]=&m_nEditDown6;
m_nDownArray[6]=&m_nEditDown7;
m_nDownArray[7]=&m_nEditDown8;
*/
m_nUpperArray[0]=&m_nEditUpper1;
m_nUpperArray[1]=&m_nEditUpper2;
m_nUpperArray[2]=&m_nEditUpper3;
m_nUpperArray[3]=&m_nEditUpper4;
/*
m_nUpperArray[4]=&m_nEditUpper5;
m_nUpperArray[5]=&m_nEditUpper6;
m_nUpperArray[6]=&m_nEditUpper7;
m_nUpperArray[7]=&m_nEditUpper8;
*/
m_nNameArray[0]=&m_nEditName1;
m_nNameArray[1]=&m_nEditName2;
m_nNameArray[2]=&m_nEditName3;
m_nNameArray[3]=&m_nEditName4;
/*
m_nNameArray[4]=&m_nEditName5;
m_nNameArray[5]=&m_nEditName6;
m_nNameArray[6]=&m_nEditName7;
m_nNameArray[7]=&m_nEditName8;
*/
m_nCurAnavalArray[0]=&m_nEditCurAnaval1;
m_nCurAnavalArray[1]=&m_nEditCurAnaval2;
m_nCurAnavalArray[2]=&m_nEditCurAnaval3;
m_nCurAnavalArray[3]=&m_nEditCurAnaval4;
/*
m_nCurAnavalArray[4]=&m_nEditCurAnaval5;
m_nCurAnavalArray[5]=&m_nEditCurAnaval6;
m_nCurAnavalArray[6]=&m_nEditCurAnaval7;
m_nCurAnavalArray[7]=&m_nEditCurAnaval8;
*/
m_nButtonID[0]=IDC_BUTTON_COLOR1;
m_nButtonID[1]=IDC_BUTTON_COLOR2;
m_nButtonID[2]=IDC_BUTTON_COLOR3;
m_nButtonID[3]=IDC_BUTTON_COLOR4;
/*
m_nButtonID[4]=IDC_BUTTON_COLOR5;
m_nButtonID[5]=IDC_BUTTON_COLOR6;
m_nButtonID[6]=IDC_BUTTON_COLOR7;
m_nButtonID[7]=IDC_BUTTON_COLOR8;
*/
m_nStaticID[0]=IDC_STATIC_UNIT1;
m_nStaticID[1]=IDC_STATIC_UNIT2;
m_nStaticID[2]=IDC_STATIC_UNIT3;
m_nStaticID[3]=IDC_STATIC_UNIT4;
/*
m_nStaticID[4]=IDC_STATIC_UNIT5;
m_nStaticID[5]=IDC_STATIC_UNIT6;
m_nStaticID[6]=IDC_STATIC_UNIT7;
m_nStaticID[7]=IDC_STATIC_UNIT8;
*/
m_nSpinDown1.SetRange(-10,10);
m_nSpinDown1.SetPos(10);
// m_nSpinDown2.SetBuddy(GetDlgItem(IDC_EDITDOWNBUDDY2));
m_nSpinDown2.SetRange(-10,10);
m_nSpinDown2.SetPos(0);
// m_nSpinDown3.SetBuddy(GetDlgItem(IDC_EDITDOWNBUDDY3));
m_nSpinDown3.SetRange(-10,10);
m_nSpinDown3.SetPos(0);
// m_nSpinDown4.SetBuddy(GetDlgItem(IDC_EDITDOWNBUDDY4));
m_nSpinDown4.SetRange(-10,10);
m_nSpinDown4.SetPos(0);
// m_nSpinUpper1.SetBuddy(GetDlgItem(IDC_EDITUPPERBUDDY1));
m_nSpinUpper1.SetRange(-10,10);
m_nSpinUpper1.SetPos(0);
// m_nSpinUpper2.SetBuddy(GetDlgItem(IDC_EDITUPPERBUDDY2));
m_nSpinUpper2.SetRange(-10,10);
m_nSpinUpper2.SetPos(0);
// m_nSpinUpper3.SetBuddy(GetDlgItem(IDC_EDITUPPERBUDDY3));
m_nSpinUpper3.SetRange(-10,10);
m_nSpinUpper3.SetPos(0);
// m_nSpinUpper4.SetBuddy(GetDlgItem(IDC_EDITUPPERBUDDY4));
m_nSpinUpper4.SetRange(-10,10);
m_nSpinUpper4.SetPos(0);
}
void CCurveDynamicDialog::ResetCtrl(short nGroupNo)
{
if ((nGroupNo<0)||(nGroupNo>=MAX_CURVE_GROUP)) return;
short nOldGroupNo=nGroupNo;
if (m_nCurSystem==1) nGroupNo+=MAX_TURBINE_CURVE;
CCurveDrawStruct *pCurveDrawStruct;
CString nStr;
CHistoryData nHistoryData;
for (int i=0;i<MAX_CURVE_NUMPERGROUP;i++)
{
pCurveDrawStruct=m_pCurveDrawStruct+(nGroupNo)*MAX_CURVE_NUMPERGROUP+i;
m_nCurAnavalArray[i]->Empty();
if ((pCurveDrawStruct->nNo<0)||(pCurveDrawStruct->nNo>=MAX_HIST_POINT))
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -