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

📄 dlggongzhuang_bk.h

📁 串口收发工具
💻 H
📖 第 1 页 / 共 2 页
字号:
// DlgGongzhuang.cpp : implementation file
//

#include "stdafx.h"
#include "maintain.h"
#include "DlgGongzhuang.h"
#include "MainFrm.h"
#include "manager.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

static UINT gz_indicators[] =
{
	ID_SEPARATOR,           // status line indicator
	ID_SEPARATOR,
};

extern bool	bShowData;
/////////////////////////////////////////////////////////////////////////////
// CDlgGongzhuang

IMPLEMENT_DYNCREATE(CDlgGongzhuang, CFrameWnd)

CDlgGongzhuang::CDlgGongzhuang()
{
	nCell = 35;//遥信表格宽度
	nleft = 180;
	ntop = 60;
	nIconWidth = 25;
	nCellYcWidth = 19;
	nCellYcHigh = 22;
	xBmp = 10;
	yBmp = 120;
	bYKBegin = false;
	bBuzzerBegin = false;
	nBtnIconWidth = 84;
	nBtnIconHeight = 24;
	nPowerWidth = 66;
	nPowerHeight = 172;
	timer1 = 500;
	timer2 = 500;
	timer3 = 5000;
	nCurOperation = 0;
	nYxLineLeft = nleft+60;
	nYcLineLeft = 120;
	nYtNoWidth = 100;
	nYtNoHeight = 20;
	nYcCount = 0;
	nYxCount = 0;
}

CDlgGongzhuang::~CDlgGongzhuang()
{
}


BEGIN_MESSAGE_MAP(CDlgGongzhuang, CFrameWnd)
	//{{AFX_MSG_MAP(CDlgGongzhuang)
	ON_WM_CREATE()
	ON_WM_PAINT()
	ON_WM_DESTROY()
	ON_WM_SIZE()
	ON_WM_TIMER()
	ON_COMMAND(IDR_I2C, OnI2c)
	ON_COMMAND(IDR_SPI, OnSpi)
	ON_COMMAND(IDR_ADDRESSLINE, OnAddressline)
	ON_COMMAND(IDR_BUZZER_ON, OnBuzzerOn)
	ON_COMMAND(IDR_BUZZER_OFF, OnBuzzerOff)
	ON_COMMAND(IDR_GZCLOCK, OnGzclock)
	ON_COMMAND(IDR_GZCOMM, OnGzcomm)
	ON_COMMAND(IDR_GZYCYX_ON, OnGzycyxOn)
	ON_COMMAND(IDR_GZYCYX_OFF, OnGzycyxOff)
	ON_COMMAND(IDR_GZ_YKBEGIN, OnGzYkbegin)
	ON_COMMAND(IDR_GZ_YKEND, OnGzYkend)
	ON_COMMAND(IDR_GZ_YT, OnGzYt)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDlgGongzhuang message handlers


int CDlgGongzhuang::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// TODO: Add your specialized creation code here
	if (!m_toolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP
		| CBRS_TOOLTIPS  ) ||
		!m_toolBar.LoadToolBar(IDR_GZ))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}

	if (!m_statusBar.Create(this) ||
		!m_statusBar.SetIndicators(gz_indicators,
		  sizeof(gz_indicators)/sizeof(UINT)))
	{
		TRACE0("Failed to create toolbar\n");
		return -1;      // fail to create
	}
	
	m_toolBar.EnableDocking(CBRS_ALIGN_ANY);
	EnableDocking(CBRS_ALIGN_ANY);
	DockControlBar(&m_toolBar);

	bmpCloud.Create("bmpCloud",WS_CHILD|SS_BITMAP|SS_CENTERIMAGE,CRect(0,0,0,0),this);
	bmpCloud.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_GZ_CLOUD)) );

	//Init bmpPower and memory dc
	bmpPower.Create("bmpPower",WS_VISIBLE|WS_CHILD|SS_BITMAP|SS_CENTERIMAGE,CRect(0,0,0,0),this);
	bmpPower.SetBitmap(::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_POWER_DF)) );

	
	editYtNo.Create(WS_VISIBLE|WS_CHILD|WS_BORDER,CRect(0,0,0,0),this,IDS_GZ_YTNO);
	editYtValue.Create(WS_VISIBLE|WS_CHILD|WS_BORDER,CRect(0,0,0,0),this,IDS_GZ_YTVALUE);
	editGzNo.Create(WS_VISIBLE|WS_CHILD|WS_BORDER,CRect(0,0,0,0),this,IDS_GZ_GZNO);
	
	memset(ycValue,0,sizeof(ycValue));
	memset(ycValueOld,0,sizeof(ycValueOld));
	memset(yxValue,-1,sizeof(yxValue));
	memset(yxValueOld,-1,sizeof(yxValueOld));
	
	for(int i=0;i<GONGZHUANG_YXOUNT;i++)
		yxicon[i].Create("",SW_HIDE|WS_CHILD|SS_ICON,CRect(0,0,0,0),this);
	 
	memset(bDataBuf,0,sizeof(bDataBuf));

	//SetTimer(1,timer1,NULL);
	SetTimer(2,timer2,NULL);
	CreateFont();

	return 0;
}

void CDlgGongzhuang::CreateFont()
{
	LOGFONT logfont;
	memset(&logfont, 0, sizeof logfont);
	logfont.lfHeight = 14;
	logfont.lfWidth=7;
	logfont.lfWeight=FW_NORMAL;
	logfont.lfCharSet=DEFAULT_CHARSET;
	lstrcpy(logfont.lfFaceName, _T("宋体"));

	m_font.CreateFontIndirect(&logfont);
 	SetFont(&m_font);
}

void CDlgGongzhuang::OnPaint() 
{
	CPaintDC dc(this); // device context for painting

	CFont *oldFont = dc.SelectObject((CFont*)&m_font);
	
	PaintBkLine(dc);
		
	dc.SelectObject(oldFont);
}

void CDlgGongzhuang::PaintBkLine(CPaintDC& dc)
{
	CString str;
	
	CPen pen(PS_SOLID,1,RGB(128,128,128));
//	CPen* oldPen;
 //	oldPen = (CPen*)dc.SelectObject(&pen);

	HDC hDC = dc.GetSafeHdc();
	HDC hMemDC = CreateCompatibleDC(hDC);
	CPen* oldPen1= (CPen*)SelectObject(hDC,&pen);

	CString szCaption = "saddddddddfsdfsdfsdfsdfsadfsfa";
	int nBkMode = SetBkMode(hMemDC,TRANSPARENT);
	TextOut(hMemDC,0,ntop,szCaption,strlen(szCaption));
	SetBkMode(hDC,nBkMode);
	SelectObject(hDC,oldPen1);

	DeleteDC(hMemDC);




	for (int i=0;i<9;i++)
	{
		dc.MoveTo(nYxLineLeft,ntop+i*nCell);
		dc.LineTo(nYxLineLeft+nCell*8,ntop+i*nCell);
		if (i<8)
		{
			str.Format(_T("遥信%d"),i*8);
			dc.TextOut(nleft,ntop+i*nCell+8,str);
		}
	}
	
	for (i=0;i<9;i++)
	{
		dc.MoveTo(nYxLineLeft+i*nCell,ntop);
		dc.LineTo(nYxLineLeft+i*nCell,ntop+nCell*8);
	}
		
	for (i=0;i<5;i++)
	{
		dc.MoveTo(nYcLineLeft,ntop+9*nCell+i*nCellYcHigh);
		dc.LineTo(nYcLineLeft+nCellYcWidth*24,ntop+9*nCell+i*nCellYcHigh);
		if (i<4)
		{
			str.Format(_T("遥测%d"),i*8+1);
			dc.TextOut(nYcLineLeft-80,ntop+9*nCell+i*nCellYcHigh,str);
		}
	}

	for (i=0;i<9;i++)
	{
		dc.MoveTo(nYcLineLeft+i*3*nCellYcWidth,ntop+9*nCell);
		dc.LineTo(nYcLineLeft+i*3*nCellYcWidth,ntop+9*nCell+4*nCellYcHigh);
	}

	dc.TextOut(nYcLineLeft-80,ntop+9*nCell+5*nCellYcHigh,_T("发送码:"));
	dc.TextOut(nYcLineLeft,ntop+9*nCell+5*nCellYcHigh,strSendCode );
	rcSendCode.left = nYcLineLeft;
	rcSendCode.right = rcSendCode.left + 5000;
	rcSendCode.top = ntop+9*nCell+5*nCellYcHigh;
	rcSendCode.bottom = rcSendCode.top + 20;

	dc.TextOut(nYxLineLeft+nCell*8+30,ntop+3,_T("遥调序号"));
	dc.TextOut(nYxLineLeft+nCell*8+30,ntop+nYtNoHeight+6,_T("遥调值"));
	dc.TextOut(nYxLineLeft+nCell*8+30,ntop+nYtNoHeight*3+6,_T("I2C/SPI号"));
 // 	dc.SelectObject(oldPen);

	ShowGzYcYxData(dc);
}

void CDlgGongzhuang::OnDestroy() 
{
	CFrameWnd::OnDestroy();
	KillTimer(1);
	KillTimer(2);
	bShowData = true;
	::SendMessage(((CMainFrame*)AfxGetMainWnd())->m_hWnd,MSG_GZWND_DESTROY,0,0);
	// TODO: Add your message handler code here
}



void CDlgGongzhuang::OnSize(UINT nType, int cx, int cy) 
{
	CFrameWnd::OnSize(nType, cx, cy);
	
	// TODO: Add your message handler code here
	bmpPower.MoveWindow(xBmp+20,yBmp+30,nPowerWidth,nPowerHeight);
	bmpCloud.MoveWindow(0,41,155,180);
	if (editYtNo)
	{
		editYtNo.MoveWindow(nYxLineLeft+nCell*8+100,ntop,nYtNoWidth,nYtNoHeight);
		editYtValue.MoveWindow(nYxLineLeft+nCell*8+100,ntop+nYtNoHeight+3,nYtNoWidth,nYtNoHeight);
		editGzNo.MoveWindow(nYxLineLeft+nCell*8+100,ntop+nYtNoHeight*3+3,nYtNoWidth,nYtNoHeight);
		editYtNo.SetWindowText("0");
		editYtValue.SetWindowText("0.0");
		editGzNo.SetWindowText("0");
	}
}

void CDlgGongzhuang::YkTestBegin()
{
	KillTimer(1);

	BYTE byBufTemp[11];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 2;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x70;
	byBufTemp[6] = 0;
	byBufTemp[7] = 0x06;
	byBufTemp[8] = 0;
	WORD parity = CManager::Crc16Parity(&byBufTemp[1],8);
	byBufTemp[9] =  (BYTE)LOBYTE(parity);
	byBufTemp[10] = (BYTE)HIBYTE(parity);

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SendCodeToHEX(byBufTemp,11);	
	//t = SetTimer(1,timer1,NULL);
}

void CDlgGongzhuang::YkTestStop()
{
	KillTimer(1);

	BYTE byBufTemp[11];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 2;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x70;
	byBufTemp[6] = 0;
	byBufTemp[7] = 0x06;
	byBufTemp[8] = 1;
	WORD parity = CManager::Crc16Parity(&byBufTemp[1],8);
	byBufTemp[9] =  (BYTE)LOBYTE(parity);
	byBufTemp[10] = (BYTE)HIBYTE(parity);

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	SendCodeToHEX(byBufTemp,11);	
	//t = SetTimer(1,timer1,NULL);
}

void CDlgGongzhuang::YtTest()
{
	nCurOperation = GONGZHUANG_TEST_YT;
	KillTimer(1);
	SetStatusBarInfo("");
	//((CMaintainApp*)AfxGetApp())->BeginWaitCursor();

	CString strTemp;
	editYtValue.GetWindowText(strTemp);
	float fYtValue = (float)atof(strTemp);
	WORD wYtValue = fYtValue*10;
	editYtNo.GetWindowText(strTemp);
	BYTE byYtNo = (BYTE)atoi(strTemp);

	BYTE byBufTemp[13];
	byBufTemp[0] = 0x7E;
	byBufTemp[1] = byGroupNo;
	byBufTemp[2] = byAddrNo;
	byBufTemp[3] = 4;
	byBufTemp[4] = 0;
	byBufTemp[5] = 0x70;
	byBufTemp[6] = 0;
	byBufTemp[7] = 0x07;
	byBufTemp[8] = byYtNo;
	byBufTemp[9] =  (BYTE)LOBYTE(wYtValue);
	byBufTemp[10] = (BYTE)HIBYTE(wYtValue);
	WORD parity = CManager::Crc16Parity(&byBufTemp[1],10);
	byBufTemp[11] =  (BYTE)LOBYTE(parity);
	byBufTemp[12] = (BYTE)HIBYTE(parity);

	m_doc = ((CMainFrame*)AfxGetMainWnd())->GetDoc();
	if(m_doc)
		m_doc->SendData(byBufTemp,sizeof(byBufTemp),true);
	
	SetTimer(3,timer3,NULL);
	SendCodeToHEX(byBufTemp,13);
}

void CDlgGongzhuang::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	switch(nIDEvent) {
	case 1:
		CallYcYx();
		break;
	case 2:
		RefreshGzYcYxDisplay();
		break;
	case 3:
		OverTimeNotReturn();
		break;
	default:
		break;
	}
	
	CFrameWnd::OnTimer(nIDEvent);
}

void CDlgGongzhuang::OverTimeNotReturn()
{
	//((CMaintainApp*)AfxGetApp())->EndWaitCursor();
	KillTimer(3);
	
	CString str = _T("测试超时未返回");

	switch(nCurOperation) {
	case GONGZHUANG_TEST_YT:
		strRtn = _T("遥调")	+ str;
		break;
	case GONGZHUANG_TEST_I2C:
		strRtn = _T("I2C")	+ str;
		break;
	case GONGZHUANG_TEST_SPI:
		strRtn = _T("SPI")	+ str;
		break;
	case GONGZHUANG_TEST_ADDRLINE:
		strRtn = _T("地址线")+ str;
		break;
	case GONGZHUANG_TEST_CLOCK:
		strRtn = _T("时钟")	+ str;
		break;
	case GONGZHUANG_TEST_COMM:
		strRtn = _T("串口")	+ str;
		break;
	default:
		break;
	}
	SetStatusBarInfo(strRtn);	
}

void CDlgGongzhuang::TransBuf(BYTE *buf,int len)
{
	memcpy(bDataBuf,buf,len);
	ProcessGzData(bDataBuf,len);
}

void CDlgGongzhuang::RefreshGzYcYxDisplay()
{
	CRect rc;
	//根据遥测值刷新显示
	for (int i=0;i<4;i++)
	{
		for (int j=0;j<8;j++)
		{
			if (ycValue[i*8+j]!=ycValueOld[i*8+j])
			{
				rc.left = nYcLineLeft+j*3*nCellYcWidth+3;
				rc.top = ntop+9*nCell+3+i*nCellYcHigh;
				rc.right = rc.left + nCellYcWidth*2;
				rc.bottom = rc.top + nCellYcHigh-5;
				RedrawWindow(rc);
				ycValueOld[i*8+j]=ycValue[i*8+j];
			}
		}
	}
	
	//根据遥信值刷新图标		
	for (int j=0;j<8;j++)
	{
		for (i=0;i<8;i++)
		{
			if (((j*8+i)>=nYxCount)||(nYxCount==0)) yxicon[i+j*8].ShowWindow(SW_HIDE);
			if (yxValue[i+j*8]!=yxValueOld[i+j*8])
			{
				yxicon[i+j*8].SetIcon((yxValue[i+j*8]==0)?AfxGetApp()->LoadIcon(IDI_GZ0):AfxGetApp()->LoadIcon(IDI_GZ1));
				yxicon[i+j*8].MoveWindow(nYxLineLeft+nCell*i+2,ntop+j*nCell+2,nIconWidth,nIconWidth,true);
				yxicon[i+j*8].ShowWindow(SW_SHOW);
				yxicon[i+j*8].RedrawWindow();
				yxValueOld[i+j*8] = yxValue[i+j*8];
			}
			
		}
	}
}
void CDlgGongzhuang::ShowGzYcYxData(CPaintDC& dc)
{
	CString str;
	//根据遥测值刷新显示
	for (int i=0;i<4;i++)
	{
		for (int j=0;j<8;j++)
		{
			str.Format("%.2f",ycValue[i*8+j]);
			if (((i*8+j)>=nYcCount)||nYcCount==0)
				str = "       ";
			dc.TextOut(nYcLineLeft+3+j*3*nCellYcWidth,ntop+9*nCell+3+i*nCellYcHigh,str);
		}
	}
	//根据遥信值刷新图标	yx的刷新在RefreshGzYcYxDisplay中	
}

void CDlgGongzhuang::CallYcYx()
{
	BYTE byBufTemp[9];

⌨️ 快捷键说明

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