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

📄 bitfeaturedlg.cpp

📁 此为某测试平台的上位机软件部分
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// BitFeatureDlg.cpp : implementation file
//

#include "stdafx.h"
#include "ShiftPltFrm.h"
#include "BitFeatureDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CBitFeatureDlg dialog
CBitFeatureDlg::CBitFeatureDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CBitFeatureDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBitFeatureDlg)	
	//}}AFX_DATA_INIT
}


void CBitFeatureDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBitFeatureDlg)
#ifdef  _USETABMODE
	DDX_Control(pDX, IDC_FEATURE_TAB, m_Tab);
	DDX_Control(pDX, IDC_CHNL_LIST, m_LstBits);
#elif  defined(_USETREE)
	DDX_Control(pDX, IDC_BITMODE_TREE, m_Tree);
	DDX_Control(pDX, IDC_CHNL_LIST1, m_LstBits);
#endif
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CBitFeatureDlg, CDialog)
	//{{AFX_MSG_MAP(CBitFeatureDlg)
#ifdef  _USETABMODE
	ON_NOTIFY(TCN_SELCHANGE, IDC_FEATURE_TAB, OnTcnSelchangeTab)
#elif  defined(_USETREE)
	ON_NOTIFY(TVN_SELCHANGED, IDC_BITMODE_TREE, OnSelchangedTree)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_CHNL_LIST1, OnItemchangedList)
	ON_NOTIFY(NM_DBLCLK, IDC_BITMODE_TREE, OnDblclkTree)
#endif
	ON_BN_CLICKED(IDC_START_BTN, OnStart)
	ON_BN_CLICKED(IDC_CMT_BTN, OnExit)
	ON_COMMAND(ACCEL_RUN_DLG, OnStart)
	ON_COMMAND(ACCEL_EXIT_DLG, OnExit)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CBitFeatureDlg::OnExit()
{
		this->EndDialog(1);
}


///////////////////////////////////////////////////////////////////////
//
#define  TOTALBOARDNUM   10
const struct   _tagTabDispInfo
{
		int    nUITabNo;
		char   szPxiModTabName[64];
}g_objDispInfo[TOTALBOARDNUM] = 
{
{0x01, "模块状态自检"},
{0x02, "串口功能自检"},
{0x03, "示波器模块"}, 
{0x04, "DMM模块"}, 
{0x05, "429模块"},
{0x06, "75SD旋变模块"},
{0x07, "PXI2575多路复用器"},
{0x08, "PXI2565 SPST继电器"},
{0x09, "PXI2527多路复用器"},
{0x0A, "PXI6508数字IO"}
};

enum  OMTabIntervMode
{
	  omFace = 0,
	  omStart
};

static  int g_nActivePage = 0;
#include "RelayDecl.h"
#include "SrlModDecl.h"

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

	m_hAccel = ::LoadAccelerators(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_ACCEL));
	CButton *ptn = (CButton *)GetDlgItem(IDC_AUTOALL_CHECK);
	ptn->SetCheck(TRUE);

#ifdef  _USETREE
	m_imageList.Create(16, 16, TRUE, 2, 2);

	HICON  hFailedIcon = ::AfxGetApp()->LoadIcon(IDI_FAILED_ICON);
	HICON  hPassIcon = ::AfxGetApp()->LoadIcon(IDI_PASS_ICON);
	HICON  hUnkIcon = ::AfxGetApp()->LoadIcon(IDI_UNK_ICON);
	//
	m_Tree.SetItemHeight(26);
	m_imageList.Add(hFailedIcon);
	m_imageList.Add(hPassIcon);	
	m_imageList.Add(hUnkIcon);
	m_Tree.SetImageList(&m_imageList, LVSIL_NORMAL);
#endif

	//1.初始化自检项内容
	for (int k=0; k<TOTALBOARDNUM; k++)
	{
#ifdef  _USETABMODE
		m_Tab.InsertItem(g_objDispInfo[k].nUITabNo, g_objDispInfo[k].szPxiModTabName);
#elif  defined(_USETREE)
		HTREEITEM  ht = m_Tree.InsertItem((LPCTSTR)g_objDispInfo[k].szPxiModTabName, 2, 2);
		m_Tree.SetItemData(ht, g_objDispInfo[k].nUITabNo);
#endif
	}
	//
	AirStutNSP::GoBitEntry(&m_Tree, g_nActivePage+1, &m_LstBits, omFace);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//1.选择某独立项测试
#ifdef  _USETABMODE
void CBitFeatureDlg::OnTcnSelchangeTab(NMHDR *pNMHDR, LRESULT *pResult)
{
		*pResult = 0;
		//得到选择的自检项
		g_nActivePage = m_Tab.GetCurSel();
		TRACE1("当前页码= %d.\n", g_nActivePage+1);

		AirStutNSP::::GoBitEntry(&m_Tree, g_nActivePage+1, &m_LstBits, omFace);
}
#elif  defined(_USETREE)
HTREEITEM  htImage = NULL;
void CBitFeatureDlg::OnSelchangedTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
		NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
		//
		htImage = m_Tree.GetSelectedItem();
		g_nActivePage = m_Tree.GetItemData(htImage);

		AirStutNSP::GoBitEntry(&m_Tree, g_nActivePage, &m_LstBits, omFace);
		
		*pResult = 0;
}
#include "StatusDlg.h"
void CBitFeatureDlg::OnDblclkTree(NMHDR* pNMHDR, LRESULT* pResult) 
{
		htImage = m_Tree.GetSelectedItem();
		int nType = m_Tree.GetItemData(htImage);

		CStatusDlg     dlg(nType);
		dlg.DoModal();

		*pResult = 0;
}
#endif



//2.执行测试
void CBitFeatureDlg::OnStart() 
{
		CButton *ptn = (CButton *)GetDlgItem(IDC_AUTOALL_CHECK);
		if (ptn->GetCheck() == TRUE)
		{	//自动运行全部
				for (int k=1; k<=10; k++)
				{
						AirStutNSP::GoBitEntry(&m_Tree, k, &m_LstBits, omStart);
				}
		}
		else
		{
				AirStutNSP::GoBitEntry(&m_Tree, g_nActivePage, &m_LstBits, omStart);
		}		
}

void CBitFeatureDlg::OnItemchangedList(NMHDR* pNMHDR, LRESULT* pResult) 
{
	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;

	//当前项序号	
	int  nItem  = pNMListView->iItem;
	BOOL bCheck = m_LstBits.GetCheck(nItem);

	TRACE2("选中列表项%d, %s.\n", nItem, bCheck?"选中":"取消");
	if (NMRefObject::g_pBaseCmd != NULL)
		NMRefObject::g_pBaseCmd->SelectItem(NMRefObject::pGlobalData, nItem, bCheck);	

	*pResult = 0;
}

BOOL CBitFeatureDlg::PreTranslateMessage(MSG* pMsg)
{
		if (WM_KEYFIRST <= pMsg->message &&WM_KEYLAST >= pMsg->message)
		{
				::TranslateAccelerator(this->GetSafeHwnd(), m_hAccel,pMsg);
				return   TRUE;
		}

		return CDialog::PreTranslateMessage(pMsg);
}




////////////////////////////////////////////////////////////////////////////////////
// 
// 
////////////////////////////////////////////////////////////////////////////////////
#include "./boarddrv\PxiHDDrv.h"
#pragma  comment(lib, "./debug/BoardDrv.lib")
#include "FuncDecl.h"
using  namespace  SRLDIOModular;
namespace   AirStutNSP
{
		//一些控制自检流程的变量
		static   PXIRelayDevResultMiscelInfo    g_sRelay2575DevInfo;
		static   PXIRelayDevResultMiscelInfo    g_sRelay2565DevInfo;
		static   PXIRelayDevResultMiscelInfo    g_sRelay2527DevInfo;

		static   PXIDMMDevResultMiscelInfo      g_sDMMDevInfo;
		static   PXIScopeDevResultMiscelInfo    g_sScopeDevInfo;
		static   ARINC429ResultMiscelInfo       g_sARINC429DevInfo;
		static   _1553BResultMiscelInfo         g_s1553BDevInfo;
		static   _75SDResultMiscelInfo			g_s75SDDevInfo;
		static   SerialPrtResultMiscelInfo		g_sSerialPortInfo;
		
		static   PXIDIODevResultMiscelInfo      g_sRelay6508DevInfo;
};
/*************************************************************************************
 * 换界面功能
 * 
 *************************************************************************************/
BOOL    g_bBoardStatusNext = TRUE;	//可以继续向下走
BOOL    g_bRS232StatusNext = TRUE;	//可以继续向下走

namespace  GeneralModular
{
/////////////////////////////////////////////////////////////////////////////////////
//模块自检的界面
class  CBoardStatusFace: public  CBitUIImpl
{
public:
	CBoardStatusFace(){;}
	virtual ~CBoardStatusFace(){;}

public:
	virtual  void  ChgFace(AttachUIObject *pUIObject, LPVOID pData)
	{
			PXIDeviceResultMiscelInfo  *pGlobData= static_cast<PXIDeviceResultMiscelInfo *>(pData);
			if (pUIObject == NULL || pGlobData == NULL)
				return ;
			
			//1.删除已存在的头和组成项
			while (pUIObject->DeleteColumn (0));
			pUIObject->DeleteAllItems();		

			//2.插入列头
			pUIObject->InsertColumn(1, "序号", LVCFMT_CENTER, 50);
			pUIObject->InsertColumn(2, "PXI模块名", LVCFMT_LEFT, 220);
			pUIObject->InsertColumn(3, "模块自检结果", LVCFMT_CENTER, 240);
			
			//3.插入子项组成
			for (int j=0; j<pGlobData->nActualDeviceNum; j++)
			{
					char   szFmt[32];
					::sprintf(szFmt, "%d", j+1);
					ADD_LISTCTRL_ITEM(pUIObject, szFmt, pGlobData->sLastDeviceObj[j].szName, "N/A")
					ALTER_LISTCTRL_ITEM_DATA(pUIObject, j+1)
			}
			
			ListView_SetExtendedListViewStyle(pUIObject->GetSafeHwnd(), LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	}
	//得到通道号
	virtual  void  CollectInfo(AttachUIObject *pUIObject, LPVOID pData)	//得到自检的信息结构
	{
			UINT  nSelectCount = pUIObject->GetSelectedCount();
			if (nSelectCount>0)
				return ;
			
	}
	virtual  void  ShowInfo(AttachUIObject *pUIObject, LPVOID pData)
	{
			PXIDeviceResultMiscelInfo  *pGlobData= static_cast<PXIDeviceResultMiscelInfo *>(pData);
			if (pUIObject == NULL || pGlobData == NULL)
				return ;
			//
			for (int j=0; j<pGlobData->nActualDeviceNum; j++)
			{
					ALTER_LISTCTRL_ITEM_Result(pUIObject, j, 2, _GETRESULT(pGlobData->sLastDeviceObj[j].bBitPass))
			}
	}
	//
	DECLARE_SELFDESTROY_MAP()
};

/////////////////////////////////////////////////////////////////////////////////////
//串口自检的界面
class  CSerialPortFace: public  CBitUIImpl
{
public:
	CSerialPortFace(){;}
	virtual ~CSerialPortFace(){;}

public:
	virtual  void  ChgFace(AttachUIObject *pUIObject, LPVOID pData)
	{
			SerialPrtResultMiscelInfo  *pGlobData= static_cast<SerialPrtResultMiscelInfo *>(pData);
			if (pUIObject == NULL || pGlobData == NULL)
				return ;
			
			//1.删除已存在的头和组成项
			while (pUIObject->DeleteColumn (0));
			pUIObject->DeleteAllItems();		
			
			//2.插入列头
			pUIObject->InsertColumn(1, "序号", LVCFMT_CENTER, 50);
			pUIObject->InsertColumn(2, "发送串口号", LVCFMT_CENTER, 140);
			pUIObject->InsertColumn(3, "接收串口号", LVCFMT_CENTER, 140);
			pUIObject->InsertColumn(4, "串口自检结果", LVCFMT_CENTER, 200);
			
			//3.插入子项组成
			for (int j=0; j<pGlobData->nActualSPNum; j++)
			{
					char   szFmt[32];
					char   szFmt1[32];
					char   szFmt2[32];
					::sprintf(szFmt, "%d", j+1);
					::sprintf(szFmt1, "%d", pGlobData->sRS232ItemInfo[j].nSendPortNo);
					::sprintf(szFmt2, "%d", pGlobData->sRS232ItemInfo[j].nRecvPortNo);

					ADD_LISTCTRL_ITEM3(pUIObject, szFmt, szFmt1, szFmt2, "N/A")
					ALTER_LISTCTRL_ITEM_DATA(pUIObject, j+1)
			}
			
			ListView_SetExtendedListViewStyle(pUIObject->GetSafeHwnd(), LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
	}
	//得到通道号
	virtual  void  CollectInfo(AttachUIObject *pUIObject, LPVOID pData)    //得到自检的信息结构
	{
			UINT  nSelectCount = pUIObject->GetSelectedCount();
			if (nSelectCount>0)
				return ;
	}
	virtual  void  ShowInfo(AttachUIObject *pUIObject, LPVOID pData)
	{
			SerialPrtResultMiscelInfo  *pGlobData= static_cast<SerialPrtResultMiscelInfo *>(pData);
			if (pUIObject == NULL || pGlobData == NULL)
				return ;
			
			for (int j=0; j<pGlobData->nActualSPNum; j++)
			{			
					ALTER_LISTCTRL_ITEM_Result(pUIObject, j, 4, _GETRESULT(pGlobData->sRS232ItemInfo[j].bPass))
			}
	}
	//
	DECLARE_SELFDESTROY_MAP()
};

/////////////////////////////////////////////////////////////////////////////////////
//继电器板自检的界面
class  CRelayBoardFace: public  CBitUIImpl

⌨️ 快捷键说明

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