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

📄 mdlg.cpp

📁 为朋友编写的 分油机运行工况仿真程序 采用MFC编写
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MDLG.cpp : 实现文件
//

#include "stdafx.h"
#include "FZK.h"
#include "MDLG.h"
#include "prog.h"
#include "Seterr.h"
#include "Yougui.h"
#include ".\mdlg.h"

CString errmsg[]={"分油机马达发生故障","管路发生故障","加热系统出现故障",	//0 1 2 
"电磁阀出现故障","气动阀出现故障","水封存在故障","出水口跑油","出水口大量跑油",	//3 4 5 6 7
"三通阀出现故障","排渣口跑油","配水盘出现故障",		//8 9 10
"需要停机检修","系统稳定","分油机马达已开启",		//11 12 13
"油泵已开启","加热器已开启","油柜油量不足","按Alarm加油"		// 14 15 16 17
};


// CMDLG 对话框

//IMPLEMENT_DYNAMIC(CMDLG, CDialog)
CMDLG::CMDLG(CWnd* pParent /*=NULL*/)
	: CDialog(CMDLG::IDD, pParent)
	, ix(0)
	, iy(0)
{
	m_pParent = pParent;
	m_nID = CMDLG::IDD;
	ix=0;iy=0;
//	isactive=0;
}

CMDLG::~CMDLG()
{
}

void CMDLG::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_SHOW1, str[0]);
	DDX_Text(pDX, IDC_SHOW2, str[1]);
	DDX_Text(pDX, IDC_SHOW3, str[2]);
	DDX_Text(pDX, IDC_SHOW4, str[3]);
	DDX_Control(pDX, IDC_JDT, mjd);
}


BEGIN_MESSAGE_MAP(CMDLG, CDialog)
//	ON_BN_CLICKED(IDOK, OnBnClickedOk)
	ON_BN_CLICKED(IDC_JJS, OnBnClickedJ)
	ON_BN_CLICKED(IDC_JZJ, OnBnClickedA)
	ON_WM_ERASEBKGND()
	ON_WM_TIMER()
	ON_WM_LBUTTONDOWN()
//	ON_WM_ACTIVATE()
END_MESSAGE_MAP()


// CMDLG 消息处理程序

void CMDLG::OnBnClickedOk()
{
	// TODO: 在此添加控件通知处理程序代码
//	OnOK();
}

BOOL CMDLG::OnEraseBkgnd(CDC* pDC)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CDialog::OnEraseBkgnd(pDC);
	CRect	rect;
	GetWindowRect(&rect);

	CDC memDC;
	CBitmap			cBitmap;
	CBitmap*		pOldMemBmp = NULL;

	//将背景位图加到设备场景中
	cBitmap.LoadBitmap(IDB_BKMAP);
	memDC.CreateCompatibleDC(pDC);
	pOldMemBmp = memDC.SelectObject(&cBitmap);

	//将背景位图显示出来
	pDC->BitBlt(0, 0, 860, 651, &memDC, 0, 0, SRCCOPY);
	return TRUE;
}

BOOL CMDLG::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  在此添加额外的初始化
	//定位标准控件
	CRect rect,rect2;
	rect2.left=ix;
	rect2.top=iy;
	rect2.right=ix+863;
	rect2.bottom=iy+651;
	MoveWindow(&rect2,TRUE);

	mjd.SetRange(0,10);
	mjd.SetPos(5);
	mjd.SetStep(1);
	show[4]=5;

	GetDlgItem(IDC_JDT)->GetClientRect(&rect);
	rect2.left=53;
	rect2.right=rect2.left+rect.Width();
	rect2.top=130;
	rect2.bottom=rect2.top+rect.Height();
	GetDlgItem(IDC_JDT)->MoveWindow(&rect2,TRUE);

	GetDlgItem(IDC_JJS)->GetClientRect(&rect);
	rect2.left=53;
	rect2.right=rect2.left+rect.Width();
	rect2.top=150;
	rect2.bottom=rect2.top+rect.Height();
	GetDlgItem(IDC_JJS)->MoveWindow(&rect2,TRUE);

	GetDlgItem(IDC_JZJ)->GetClientRect(&rect);
	rect2.left=80;
	rect2.right=rect2.left+rect.Width();
	rect2.top=150;
	rect2.bottom=rect2.top+rect.Height();
	GetDlgItem(IDC_JZJ)->MoveWindow(&rect2,TRUE);

	GetDlgItem(IDC_SHOW1)->GetClientRect(&rect);
	rect2.left=351;
	rect2.right=rect2.left+rect.Width();
	rect2.top=195;
	rect2.bottom=rect2.top+rect.Height();
	GetDlgItem(IDC_SHOW1)->MoveWindow(&rect2,TRUE);

	GetDlgItem(IDC_SHOW2)->GetClientRect(&rect);
	rect2.left=795;
	rect2.right=rect2.left+rect.Width();
	rect2.top=175;
	rect2.bottom=rect2.top+rect.Height();
	GetDlgItem(IDC_SHOW2)->MoveWindow(&rect2,TRUE);

	GetDlgItem(IDC_SHOW3)->GetClientRect(&rect);
	rect2.left=64;
	rect2.right=rect2.left+rect.Width();
	rect2.top=399;
	rect2.bottom=rect2.top+rect.Height();
	GetDlgItem(IDC_SHOW3)->MoveWindow(&rect2,TRUE);

	GetDlgItem(IDC_SHOW4)->GetClientRect(&rect);
	rect2.left=130;
	rect2.right=rect2.left+rect.Width();
	rect2.top=120;
	rect2.bottom=rect2.top+rect.Height();
	GetDlgItem(IDC_SHOW4)->MoveWindow(&rect2,TRUE);
/*
	str[0].Format("122MP");
	UpdateData(FALSE);
*/
	// 载入要使用的图片资源
	bitmap[0].LoadBitmap(IDB_BKMAP);		// 背景
	bitmap[1].LoadBitmap(IDB_BANG);			// 泵动画
	bitmap[2].LoadBitmap(IDB_BIAOZHEN);		// 电流表指针
	bitmap[3].LoadBitmap(IDB_FA);			// 阀
	bitmap[4].LoadBitmap(IDB_JIANTOU);		// 箭头
	bitmap[5].LoadBitmap(IDB_DENGB);		// 灯黑
	bitmap[6].LoadBitmap(IDB_DENGG);		// 灯绿
	bitmap[7].LoadBitmap(IDB_DENGRA);		// 灯红暗
	bitmap[8].LoadBitmap(IDB_DENGRL);		// 灯红亮
	bitmap[9].LoadBitmap(IDB_GGKG);			// 工况开关
	bitmap[10].LoadBitmap(IDB_GAOJH);		// 告警灯红
	bitmap[11].LoadBitmap(IDB_YOUGUI);		// 油柜

	//初始化控件
	//阀 按钮等
	for(int bufi=0;bufi<20;bufi++)
	{
		m_kj[bufi].Init(&bitmap[3]);
		m_kj[bufi].SetNty(bufi);
	}
	m_kj[20].Init(&bitmap[9]);
	for(int bufi=21;bufi<24;bufi++)
		m_kj[bufi].Init(&bitmap[6]);
	m_kj[24].Init(&bitmap[6]);
	m_kj[25].Init(&bitmap[8]);
	m_kj[26].Init(&bitmap[7]);
	m_kj[27].Init(&bitmap[8]);
	m_kj[28].Init(&bitmap[8]);
	for(int bufi=20;bufi<29;bufi++)
		m_kj[bufi].SetNty(bufi);
	//箭头,泵
	m_dh[0].Init(&bitmap[1]);
	m_dh[0].SetNty(0);
	for(int bufi=1;bufi<18;bufi++)
	{
		m_dh[bufi].Init(&bitmap[4]);
		m_dh[bufi].SetNty(bufi);
	}
	m_dh[18].Init(&bitmap[10]);
	m_dh[18].SetNty(18);
	for(int bufi=19;bufi<21;bufi++)
	{
		m_dh[bufi].Init(&bitmap[4]);
		m_dh[bufi].SetNty(bufi);
	}

	//初始化虚拟机
	dlay=0;
	setp=0;
	alarmsp=0;
	script=0;
	isrun=0;
	dostop=0;

	//初始化故障
	errn=-1;

	//初始化显示
	for(int bufi=0;bufi<4;bufi++)
	{
		show[bufi]=0;
		setshow[bufi]=0;
	}

	//初始化错误提示
	m_errout.Init();

	//初始化油柜
	for(int bufi=0;bufi<3;bufi++)
	{
		m_youg[bufi].Init(&bitmap[11]);
		m_youg[bufi].SetSty(bufi);
		m_youg[bufi].reset();
		m_youg[bufi].SetCanchage(0);
	}
	m_youg[0].ste=-show[4]*10-10;
	m_youg[1].ste=show[4]*10;
	m_youg[2].ste=show[4]*5;
	sdrst=0;


	// 设置定时器
	SetTimer(100,100,NULL);
	SetTimer(101,10,NULL);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 异常: OCX 属性页应返回 FALSE
}

void CMDLG::OnTimer(UINT nIDEvent)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	if(nIDEvent==100)
	{
		if(dlay>0) dlay--;
		else dlay=0;
		chk();
		Drewme();
	}
	else if(nIDEvent==101)
	{
		luoji();
	}

	//表盘指针
//	mdc.SelectObject(&bitmap[3]);
//	dc->BitBlt(0,538,199,99,&mdc,0,0,SRCCOPY);
//	mdc.SelectObject(&bitmap[4]);
//	dc->BitBlt(tmp,570,7,60,&mdc,0,0,SRCAND);

	CDialog::OnTimer(nIDEvent);
}

BOOL CMDLG::Create()
{
	return CDialog::Create(m_nID, m_pParent);
}

void CMDLG::OnOK()
{
	return;
}

void CMDLG::OnCancel()
{
	return;
	DestroyWindow();
}

void CMDLG::PostNcDestroy()
{
	// TODO: 在此添加专用代码和/或调用基类
	delete this;

//	CDialog::PostNcDestroy();
}

void CMDLG::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	int bufi=chkrect(point);
	CString sbuf;
	if(bufi!=-1)		// 如果有控件被单击
	{
		if(bufi<21) m_kj[bufi].ChangeN();

		if(bufi==0)
		{
			if(m_kj[0].GetN()) m_dh[19].ChangeN(-1);
			else m_dh[19].ChangeN(0);
		}
		else if(bufi==1)
		{
			if(m_kj[1].GetN()) m_dh[20].ChangeN(-1);
			else m_dh[20].ChangeN(0);
		}

		if(bufi==24)	// Start被单击
		{
			if(m_kj[24].GetN()) return;

			if(errn==0||errn==1||errn==2)
			{
				m_kj[bufi].ChangeN(0);
				return;
			}

			if(isrun==1)
			{
				m_errout.Adderr(1,"上一个步骤还未完成");
				return;
			}

			for(int i=0;i<9;i++)
			{
				if(!m_kj[i].GetN())
				{
					m_kj[bufi].ChangeN(0);
					sbuf.Format("手动阀%d还没有开启",i+1);
					m_errout.Adderr(1,sbuf);
					return;
				}
			}

			if(!m_kj[23].GetN())
			{
				m_kj[bufi].ChangeN(0);

				sbuf.Format("加热器还没有开启");
				m_errout.Adderr(1,sbuf);
				return;
			}

			m_kj[bufi].ChangeN(1);
			for(int i=0;i<10;i++)
				m_kj[i].SetUse(0);
			m_kj[20].SetUse(0);
			if(m_kj[20].GetN())
				prog=star2;
			else
			{
				switch(errn) {
				case 3:
					prog=err_dcf;
					break;
				case 4:
					prog=err_qd;
					break;
				case 5:
					prog=err_sf;
					break;
				case 6:
					prog=err_csk;
					break;
				case 7:
					prog=err_cskd;
					break;
				case 8:
					prog=err_stf;
					break;
				case 9:
					prog=err_pzk;
					break;
				default:
					prog=star;
				}
				
			}
			isrun=1;
			setp=0;
			dlay=0;
			m_errout.Adderr(0,"启动自动过程");
		}
		else if(bufi==22)//油泵
		{

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -