📄 dlggongzhuang_bk.h
字号:
// 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 + -