📄 bitfeaturedlg.cpp
字号:
// 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 + -