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

📄 previewpane2.cpp

📁 串口收发工具
💻 CPP
字号:
// PreviewPane2.cpp : implementation file
//

#include "stdafx.h"
#include "maintain.h"
#include "PreviewPane2.h"

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

#define CAPT_MAX_HEIGHT	20
#define CAPT_MIN_HEIGHT 20

#define TEXT_BOLD_LEFT	4
#define TEXT_NORM_LEFT	4
#define TEXT_LINE_ONE	4
#define TEXT_LINE_TWO	30

#define TEXT_LINE_THREE	55
#define TEXT_LINE_FOUR	80
#define TEXT_LINE_FIVE	105

extern CWordArray m_ycArray,m_0250ycArray,m_jdycArray,m_jdxjMuxianArray,m_jdxjZhiluArray;
extern CByteArray m_yxArray;
extern int ngyType;//规约类型
char *strLabel[] = {"YC(Dec)","YC(Hex)"};
/////////////////////////////////////////////////////////////////////////////
// CPreviewPane2

IMPLEMENT_DYNCREATE(CPreviewPane2, CView)

CPreviewPane2::CPreviewPane2()
{
	m_str1 = "当前操作--";
	m_str2 = "文件名称--";
	m_str3 = "传送次数--";
	m_str4 = "操作结果--";
	m_bMax = TRUE;
	bShowType = true;
}

CPreviewPane2::~CPreviewPane2()
{
}


BEGIN_MESSAGE_MAP(CPreviewPane2, CView)
	//{{AFX_MSG_MAP(CPreviewPane2)
	ON_WM_PAINT()
	ON_WM_CREATE()
	ON_WM_SIZE()
	ON_WM_TIMER()
	ON_NOTIFY(LVN_COLUMNCLICK, ID_LIST, OnColumnclickList1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPreviewPane2 drawing

void CPreviewPane2::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CPreviewPane2 diagnostics

#ifdef _DEBUG
void CPreviewPane2::AssertValid() const
{
	CView::AssertValid();
}

void CPreviewPane2::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CPreviewPane2 message handlers

void CPreviewPane2::OnPaint() 
{
	CPaintDC dc(this); // device context for painting
	if (m_bMax)
	{
		CFont *oldFont = dc.SelectObject((CFont*)&m_font);
		dc.TextOut(TEXT_NORM_LEFT, TEXT_LINE_TWO, m_str1);
		dc.TextOut(TEXT_NORM_LEFT, TEXT_LINE_THREE, m_str2);
		dc.TextOut(TEXT_NORM_LEFT, TEXT_LINE_FOUR, m_str3);
		dc.TextOut(TEXT_NORM_LEFT, TEXT_LINE_FIVE, m_str4);
		dc.SelectObject(oldFont);
	}
}
void CPreviewPane2::SetActionExpain(int nIndex, CString str)
{
	CString strTemp;
	switch(nIndex)
	{
	case 1://当前操作
		
		strTemp = m_str1.Left(10);
		m_str1 = strTemp + str;
		
		break;
	case 2://文件名称
		
		strTemp = m_str2.Left(10);
		m_str2 = strTemp + str;
		
		break;
	case 3://传送次数
		
		strTemp = m_str3.Left(10);
		m_str3 = strTemp + str;
		
		break;
	case 4://组帧结构
		
		break;
	case 5://操作结果
		strTemp = m_str4.Left(10);
		m_str4 = strTemp + str;
		
		break;
	default:
		break;
	}
	Invalidate(true);
}
void CPreviewPane2::ClearList()
{
	int nCount = m_list.GetItemCount();
	for(int j=0;j<nCount;j++)
		for(int i=1;i<6;i++)
			m_list.SetItemText(j,i,"");
}
void CPreviewPane2::ShowList(bool bShow)
{
	m_list.ShowWindow(bShow?SW_SHOW:SW_HIDE);
}
void CPreviewPane2::AddSOEToList(int wMilliseconds, int wSecond, int wMinute, int wHour, int wDay, int wMonth, int yxno, int yxstatus)
{
	int nCount = m_list.GetItemCount();
	CString str,strTime;
	for(int i=0;i<nCount;i++)
	{
		if((m_list.GetItemText(i,5)).IsEmpty())
		{
			if(wMonth)
				str.Format("YX%d%s[%d-%d %d:%d:%d.%d]",yxno,yxstatus?"警":"复",wMonth,wDay,wHour,wMinute,wSecond,wMilliseconds);
			else
				str.Format("YX%d%s[%d %d:%d:%d.%d]",yxno,yxstatus?"警":"复",wDay,wHour,wMinute,wSecond,wMilliseconds);
			m_list.SetItemText(i,5,str);
			break;
		}
	}
}

int CPreviewPane2::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
m_list.Create(LVS_REPORT|WS_CHILD,CRect(0,0,0,0),this,ID_LIST);
	m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

	LVITEM		m_lvItem;	
	LVCOLUMN	m_lvCol;
	m_lvCol.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT|LVCF_WIDTH;
	m_lvCol.fmt  = LVCFMT_LEFT ;
	m_lvItem.mask	  = LVIF_TEXT;
	m_lvItem.iSubItem = 0;
	m_lvItem.pszText  = "";

	m_lvCol.pszText = _T("*");
	m_lvCol.cx = 30;
	m_list.InsertColumn(0,&m_lvCol);

	m_lvCol.pszText = strLabel[0];
	m_lvCol.cx = 60;
	m_list.InsertColumn(1,&m_lvCol);


	m_lvCol.pszText = _T("YC-0250");
	m_lvCol.cx = 60;
	m_list.InsertColumn(2,&m_lvCol);

	m_lvCol.pszText = _T("YC-接地");
	m_lvCol.cx = 60;
	m_list.InsertColumn(3,&m_lvCol);

	m_lvCol.pszText = _T("YX");
	m_lvCol.cx = 70;
	m_list.InsertColumn(4,&m_lvCol);

	m_lvCol.pszText = _T("SOE");
	m_lvCol.cx = 180;
	m_list.InsertColumn(5,&m_lvCol);
	
	CString str;
	for(int i=0;i<LISTITEM_COUNT;i++)
	{
		m_list.InsertItem(i,"");
		str.Format("%d",i);
		m_list.SetItemText(i,0,str);
	}
	SetTimer(1,1000,NULL);
	
	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);
	
	return 0;	
}

void CPreviewPane2::OnSize(UINT nType, int cx, int cy) 
{
	CView::OnSize(nType, cx, cy);
	
	CRect rc;
	GetClientRect(rc);
	m_list.MoveWindow(rc,true);
}

void CPreviewPane2::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CString str,strTemp;
	BYTE tempYx;
	char bBuf[8];

	if(nIDEvent == 1)
	{
		int count = m_yxArray.GetSize();
		for(int i=0 ; i<count; i++)
		{
			tempYx = m_yxArray.GetAt(i);
			itoa(tempYx,bBuf,2);
			str = bBuf;
			int bLen = str.GetLength();
			switch(bLen)
			{
			case 1:
				str = "0000000"+str;
				break;
			case 2:
				str = "000000"+str;
				break;
			case 3:
				str = "00000"+str;
				break;
			case 4:
				str = "0000"+str;
				break;
			case 5:
				str = "000"+str;
				break;
			case 6:
				str = "00"+str;
				break;
			case 7:
				str = "0"+str;
				break;
			default:
				break;
			}
			m_list.SetItemText(i,4,str);	
		}
		WORD tempYc;int value;
		count = m_ycArray.GetSize();
		for(i=0 ; i<count; i++)
		{
			tempYc = m_ycArray.GetAt(i);
			if (bShowType)//10进制
			{
				if(ngyType == GY_CDT)//CDT
				{
					if(tempYc&0x0800)//负数
						value = ((((~((tempYc)&0x07ff))&0x07ff)+1)&0x07ff)*(-2);
					else
						value = tempYc*2;
				}
				else//FDK,0420
				{
					if(tempYc&0x8000)//负数
						value = (tempYc&0x7fff)*(-1);
					else
						value = tempYc;
				}
				str.Format("%d",value);
			}
			else
			{
				str.Format("%x",tempYc);
				str.MakeUpper();
			}
			
			m_list.SetItemText(i,1,str);
		}
		count = m_0250ycArray.GetSize();
		for(i=0 ; i<count; i++)
		{
			tempYc = m_0250ycArray.GetAt(i);
			
			if(tempYc&0x0800)//负数
				value = ((((~((tempYc)&0x07ff))&0x07ff)+1)&0x07ff)*(-2);
			else
				value = tempYc*2;
			str.Format("%d",value);
			m_list.SetItemText(i,2,str);
		}
		if(ngyType == GY_JDXJ)//接地巡检仪
		{
			count = m_jdxjMuxianArray.GetSize();
			for(i=0 ; i<count; i++)
			{
				tempYc = m_jdxjMuxianArray.GetAt(i);
				str.Format("%d",tempYc);
				m_list.SetItemText(i,3,str);
			}
			int count2 = m_jdxjZhiluArray.GetSize();
			for(i=0 ; i<count2; i++)
			{
				tempYc = m_jdxjZhiluArray.GetAt(i);
				str.Format("%d",tempYc);
				m_list.SetItemText(count+i,3,str);
			}
		}
		else
		{
			count = m_jdycArray.GetSize();
			for(i=0 ; i<count; i++)
			{
				tempYc = m_jdycArray.GetAt(i);
				if(tempYc&0x0800)//负数
					value = ((((~((tempYc)&0x07ff))&0x07ff)+1)&0x07ff)*(-2);
				else
					value = tempYc*2;
				str.Format("%d",value);
				m_list.SetItemText(i,3,str);
			}
		}
	}
	CView::OnTimer(nIDEvent);
}

void CPreviewPane2::OnColumnclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
	// TODO: Add your control notification handler code here
	if(pNMListView->iSubItem == 1)
	{
		char buf[50];
		LVCOLUMN lv;
		lv.mask = LVCF_TEXT;
		lv.pszText = buf;
		lv.cchTextMax = sizeof(buf);
		if(m_list.GetColumn(1,&lv))
		{
			if (strcmp(buf,strLabel[0])==0)
			{
				lv.pszText = strLabel[1];
				bShowType = false;
			}
			else
			{
				lv.pszText = strLabel[0];
				bShowType = true;
			}
			m_list.SetColumn(1,&lv);
		}
	}
	*pResult = 0;
}

⌨️ 快捷键说明

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