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

📄 rdddbgdlg.cpp

📁 PDA串口通讯程序,实现收发功能并根据协议解析等功能
💻 CPP
字号:
// RddDbgDlg.cpp : implementation file
//

#include "stdafx.h"
#include "RddDbg.h"
#include "RddDbgDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CRddDbgDlg dialog

CRddDbgDlg::CRddDbgDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRddDbgDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRddDbgDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CRddDbgDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRddDbgDlg)
	DDX_Control(pDX, IDC_YXLIST, m_yxlist);
	DDX_Control(pDX, IDC_YCLIST, m_yclist);
	DDX_Control(pDX, IDC_TAB, m_tab);
	DDX_Control(pDX, IDC_SOELIST, m_soelist);
	DDX_Control(pDX, IDC_CMDLIST, m_cmdlist);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CRddDbgDlg, CDialog)
	//{{AFX_MSG_MAP(CRddDbgDlg)
	ON_WM_SIZE()
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnSelchangeTab)
	ON_NOTIFY(NM_DBLCLK, IDC_CMDLIST, OnDblclkCmdlist)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRddDbgDlg message handlers

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

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon

	WORD wX = GetSystemMetrics(SM_CXSCREEN);
	WORD wY = GetSystemMetrics(SM_CYSCREEN);
	SetWindowPos(NULL, 0, 0, wX, wY, SWP_NOSIZE | SWP_NOZORDER);
	CenterWindow(GetDesktopWindow());	// center to the hpc screen
	m_tab.InsertItem( 0, _T("命令列表") );
	m_tab.InsertItem( 1, _T("遥测") );
	m_tab.InsertItem( 2, _T("遥信") );
	m_tab.InsertItem( 3, _T("SOE") );
	
	//命令列表初始化头
	m_cmdlist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	m_cmdlist.InsertColumn( 0, L"标识", LVCFMT_CENTER, wX/8+6, 0 );
	m_cmdlist.InsertColumn( 1, L"命令名", LVCFMT_CENTER, wX/8*3-20, 0 );
	m_cmdlist.InsertColumn( 2, L"命令状态", LVCFMT_CENTER, wX/2+8, 0 );
	InitCmdList();
	
	//遥测列表头
	m_yclist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	m_yclist.InsertColumn( 0, L"路号", LVCFMT_CENTER, 40, 0 );
	m_yclist.InsertColumn( 1, L"电压", LVCFMT_CENTER, 60, 0 );
	m_yclist.InsertColumn( 2, L"电流", LVCFMT_CENTER, 60, 0 );
	m_yclist.InsertColumn( 3, L"有功", LVCFMT_CENTER, 60, 0 );
	m_yclist.InsertColumn( 4, L"无功", LVCFMT_CENTER, 60, 0 );
	m_yclist.InsertColumn( 5, L"功率因素", LVCFMT_CENTER, 60, 0 );
	m_yclist.InsertColumn( 6, L"阻抗", LVCFMT_CENTER, 60, 0 );
	m_yclist.InsertColumn( 7, L"亮灯率", LVCFMT_CENTER, 60, 0 );
	m_yclist.InsertColumn( 8, L"光照度", LVCFMT_CENTER, 60, 0 );
	InitYCList();

	//遥信列表头
	m_yxlist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	m_yxlist.InsertColumn( 0, L"时间", LVCFMT_CENTER, 100, 0 );
	m_yxlist.InsertColumn( 1, L"遥信类别", LVCFMT_CENTER, wX-105, 0 );

	m_soelist.SetExtendedStyle(LVS_EX_FULLROWSELECT);
	m_soelist.InsertColumn( 0, L"时间", LVCFMT_CENTER, 100, 0 );
	m_soelist.InsertColumn( 1, L"SOE类别", LVCFMT_CENTER, wX-105, 0 );
	
	return TRUE;  
}



void CRddDbgDlg::OnSize(UINT nType, int cx, int cy) 
{
	CDialog::OnSize(nType, cx, cy);
	
	if(m_tab.GetSafeHwnd())
	{
		m_tab.SetWindowPos(0,0,0,cx,cy,SWP_NOZORDER);
		m_cmdlist.SetWindowPos(0,2,0,cx,cy-21,SWP_NOZORDER);
		m_soelist.SetWindowPos(0,2,0,cx,cy-21,SWP_NOZORDER);
		m_yclist.SetWindowPos(0,2,0,cx,cy-21,SWP_NOZORDER);
		m_yxlist.SetWindowPos(0,2,0,cx,cy-21,SWP_NOZORDER);
	}
	// TODO: Add your message handler code here
	
}

void CRddDbgDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	int sel = m_tab.GetCurSel();
	
	switch(sel)
	{
	case 0:
		m_cmdlist.ShowWindow(SW_SHOW);
		m_yclist.ShowWindow(SW_HIDE);
		m_yxlist.ShowWindow(SW_HIDE);
		m_soelist.ShowWindow(SW_HIDE);
		break;
	case 1:
		m_yclist.ShowWindow(SW_SHOW);
		m_cmdlist.ShowWindow(SW_HIDE);
		m_yxlist.ShowWindow(SW_HIDE);
		m_soelist.ShowWindow(SW_HIDE);
		break;
	case 2:
		m_yxlist.ShowWindow(SW_SHOW);
		m_cmdlist.ShowWindow(SW_HIDE);
		m_yclist.ShowWindow(SW_HIDE);
		m_soelist.ShowWindow(SW_HIDE);
		break;
	case 3:
		m_soelist.ShowWindow(SW_SHOW);
		m_cmdlist.ShowWindow(SW_HIDE);
		m_yclist.ShowWindow(SW_HIDE);
		m_yxlist.ShowWindow(SW_HIDE);
		break;
	}
	
	*pResult = 0;
}

void CRddDbgDlg::InitCmdList()
{
	int iRootItem = 0;
	
	m_cmdlist.InsertItem( iRootItem, _T("11") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("读装置ID"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("12") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("进入调试"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("13") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("进入正常"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("14") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("设置CT/PT"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("103") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("时间同步"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("196") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("时间查询"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("160") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("设时间表"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("162") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("召时间表"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("149") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("手开关灯"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("100") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("总召唤"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("259") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("一级数据"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("258") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("二级数据"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("165") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("通信参数"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("110") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("越限参数"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("207") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("上传标志"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("170") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("屏蔽字"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
	
	m_cmdlist.InsertItem( iRootItem, _T("182") );
	m_cmdlist.SetItemText(iRootItem, 1, _T("程序版本"));
	m_cmdlist.SetItemText(iRootItem, 2, _T("双击执行"));
	
	iRootItem++;
}

void CRddDbgDlg::InitYCList()
{
	for(int i=0; i<18; i++)
	{
		CString strNum;
		strNum.Format(_T("%d"), i+1);
		m_yclist.InsertItem(i, strNum);
		for(int iSub=1; iSub<=7; iSub++)
		{
			m_yclist.SetItemText(i, iSub, _T("0.00"));
		}
		m_yclist.SetItemText(i, 8, _T(""));
	}
}

void CRddDbgDlg::OnDblclkCmdlist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	if(CCommManager::m_bIsRun)
	{
		return ;
	}
	
	NMLISTVIEW *pd = (NMLISTVIEW*)pNMHDR;
	int iItem = pd->iItem;
	m_cmdlist.SetItemText(iItem, 2, L"正在执行...");
	CString strCmd;
	strCmd = m_cmdlist.GetItemText(iItem, 0);
	TCHAR    *strD;
	//得到命令标识
	int iCmd = (int)wcstod(strCmd, &strD);
	

	CCmdManager::DataFunc pFun = ((CRddDbgApp*)AfxGetApp())->m_CmdManager.GetDataFunc(iCmd);
	if(pFun != NULL)
	{
		CCommManager::m_bIsRun = TRUE;
		if(!CCommManager::InitManager()) return ;
		((CRddDbgApp*)AfxGetApp())->m_CmdManager.m_iItem = iItem;

		(((CRddDbgApp*)AfxGetApp())->m_CmdManager.*pFun)(iItem);
	}
	else //没有对应的命令处理函数
	{
		TRACE(_T("%.2X命令字没有对应的处理函数"), iCmd);
	}
	CCommManager::m_bIsRun = FALSE;

	*pResult = 0;
}

⌨️ 快捷键说明

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