📄 portseqrwdlg.cpp
字号:
// PortSeqRwDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "HW_sigal.h"
#include "PortSeqRwDlg.h"
#include ".\portseqrwdlg.h"
#include ".\HwReadWrite.h"
#include <winioctl.h>
// CPortSeqRwDlg 对话框
IMPLEMENT_DYNAMIC(CPortSeqRwDlg, CDialog)
CPortSeqRwDlg::CPortSeqRwDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPortSeqRwDlg::IDD, pParent)
, m_nPort(_T(""))
, m_sValue(_T(""))
, m_sSize(_T(""))
{
}
CPortSeqRwDlg::~CPortSeqRwDlg()
{
}
void CPortSeqRwDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_OPTS, m_lstOptions);
DDX_Control(pDX, IDC_LIST_RESULT, m_lstResult);
DDX_Control(pDX, IDC_COMBO_OPT, m_cmbOption);
DDX_Text(pDX, IDC_EDIT_PORT, m_nPort);
DDX_Text(pDX, IDC_EDIT_VALUE, m_sValue);
DDX_Text(pDX, IDC_EDIT_PORT2, m_sSize);
}
BEGIN_MESSAGE_MAP(CPortSeqRwDlg, CDialog)
ON_WM_SHOWWINDOW()
ON_NOTIFY(LVN_ITEMCHANGED, IDC_LIST_OPTS, OnLvnItemchangedListOpts)
ON_BN_CLICKED(IDC_BUTTON_ADD, OnBnClickedButtonAdd)
ON_BN_CLICKED(IDC_BUTTON_RUN, OnBnClickedButtonRun)
ON_BN_CLICKED(IDC_BUTTON_DELETE, OnBnClickedButtonDelete)
END_MESSAGE_MAP()
// CPortSeqRwDlg 消息处理程序
BOOL CPortSeqRwDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: 在此添加额外的初始化
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
void CPortSeqRwDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: 在此处添加消息处理程序代码
//show the combox
this->m_cmbOption.SetCurSel(0);
//list initialize
CRect rect;
//show option list
ListView_SetExtendedListViewStyleEx(this->m_lstOptions.GetSafeHwnd(), LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT);
//Initialize the list box
m_lstOptions.GetClientRect(&rect);
int nInterval = rect.Width()/5;
m_lstOptions.InsertColumn(0, _T("Operation"), LVCFMT_LEFT, nInterval*1.5);
m_lstOptions.InsertColumn(1, _T("Port"), LVCFMT_LEFT, nInterval);
m_lstOptions.InsertColumn(2, _T("Size"), LVCFMT_LEFT, nInterval);
m_lstOptions.InsertColumn(3, _T("Value"), LVCFMT_LEFT, rect.Width()-2*nInterval-2);
//show result list
ListView_SetExtendedListViewStyleEx(this->m_lstResult.GetSafeHwnd(), LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT);
//Initialize the list box
m_lstResult.GetClientRect(&rect);
nInterval = rect.Width()/5;
m_lstResult.InsertColumn(0, _T("Operation"), LVCFMT_LEFT, nInterval*2);
m_lstResult.InsertColumn(1, _T("Port"), LVCFMT_LEFT, nInterval);
m_lstResult.InsertColumn(2, _T("Result"), LVCFMT_LEFT, rect.Width()-2*nInterval-2);
}
void CPortSeqRwDlg::OnLvnItemchangedListOpts(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// TODO: 在此添加控件通知处理程序代码
*pResult = 0;
}
void CPortSeqRwDlg::OnBnClickedButtonAdd()
{
// TODO: 在此添加控件通知处理程序代码
CString strOpt;
int curSel;
int i;
//get port & value
this->UpdateData(true);
curSel = this->m_cmbOption.GetCurSel();
m_cmbOption.GetLBText(curSel,strOpt);
i = this->m_lstOptions.GetItemCount();
//add the item to list operations
LV_ITEM lvi;
TCHAR szItem[256];
lvi.mask = LVIF_TEXT;
// First item
lvi.iItem = i; //add to latest
lvi.iSubItem = 0;
_stprintf(szItem, _T("%s"), strOpt);
lvi.pszText = szItem;
m_lstOptions.InsertItem(&lvi);
// SubItem 1
lvi.iSubItem = 1;
_stprintf(szItem, _T("%s"), this->m_nPort);
lvi.pszText = szItem;
m_lstOptions.SetItem(&lvi);
// SubItem 1
lvi.iSubItem = 2;
_stprintf(szItem, _T("%s"), this->m_sSize);
lvi.pszText = szItem;
m_lstOptions.SetItem(&lvi);
// SubItem 2
lvi.iSubItem = 3;
if(curSel == 1)
{
_stprintf(szItem, _T("%s"), this->m_sValue);
}
else
{
_stprintf(szItem, _T("%s"), "");
}
m_lstOptions.SetItem(&lvi);
}
void CPortSeqRwDlg::OnBnClickedButtonRun()
{
// TODO: 在此添加控件通知处理程序代码
CString strOp;
CString strPort;
CString strValue;
CString strResult;
IOPORTRWP iorwList[100];
//get the operation list
LV_ITEM lvi;
lvi.mask = LVIF_TEXT;
CList <IOPORTRWP, IOPORTRWP&> listIO;
TCHAR szItem[256];
int cnt;
unsigned long result;
cnt = this->m_lstOptions.GetItemCount();
m_lstResult.DeleteAllItems();
for(int i=0; i<cnt; i++)
{
this->m_lstOptions.GetItemText(i, 0, szItem, 10);
CString op = CString(szItem);
if(op.Compare(CString("READ")) == 0)
{
//read
this->m_lstOptions.GetItemText(i, 1, szItem, 10);
strPort = CString(szItem);
int nPort = _tcstoul(szItem, 0, 16);
this->m_lstOptions.GetItemText(i, 2, szItem, 10);
int size = _tcstoul(szItem, 0, 16);
IOPORTRWP ior;
//gpHwRw->GetPortVal(nPort, &result, size);
ior.isRead = true;
ior.portAddress = nPort;
ior.portValue = 0;
ior.rwSize = size;
iorwList[i] = ior;
// strResult.Format("%0x", result);
}
else
{
//write
//read
this->m_lstOptions.GetItemText(i, 1, szItem, 10);
strPort = CString(szItem);
int nPort = _tcstoul(szItem, 0, 16);
this->m_lstOptions.GetItemText(i, 2, szItem, 10);
int size = _tcstoul(szItem, 0, 16);
this->m_lstOptions.GetItemText(i, 3, szItem, 10);
int value = _tcstoul(szItem, 0, 16);
//gpHwRw->SetPortVal(nPort, value, size);
IOPORTRWP ior;
ior.isRead = false;
ior.portAddress = nPort;
ior.portValue = value;
ior.rwSize = size;
iorwList[i] = ior;
//strResult.Format("%s", "success");
}
}
for(int index =0; index < cnt; index++)
{
unsigned long bytesReturned;
DeviceIoControl ( gpHwRw->m_hDevice,
(DWORD) IOCTL_PORT_READ_WRITE,
&iorwList[index],
sizeof(IOPORTRWP),
&iorwList[index].portValue,
sizeof(ULONG),
&bytesReturned,
NULL
);
}
// pos = listIO.GetHeadPosition();
for(int index =0; index < cnt; index++)
{
IOPORTRWP ior = iorwList[index];
if(ior.isRead)
{
strOp = CString("READ");
strResult.Format("%0x", ior.portValue);
}
else
{
strOp = CString("WRITE");
strResult.Format("%s", "success");
}
//get the result, write to report
//LV_ITEM lvi;
lvi.iItem = index; //add to latest
lvi.iSubItem = 0;
_stprintf(szItem, _T("%s"), strOp);
lvi.pszText = szItem;
this->m_lstResult.InsertItem(&lvi);
// SubItem 1
strPort.Format("%0x", ior.portAddress);
lvi.iSubItem = 1;
_stprintf(szItem, _T("%s"), strPort);
lvi.pszText = szItem;
m_lstResult.SetItem(&lvi);
// SubItem 2
lvi.iSubItem = 2;
_stprintf(szItem, _T("%s"), strResult);
lvi.pszText = szItem;
m_lstResult.SetItem(&lvi);
}
}
void CPortSeqRwDlg::OnBnClickedButtonDelete()
{
// TODO: 在此添加控件通知处理程序代码
//int cnt = this->m_lstOptions.GetItemCount();
int iPos = m_lstOptions.GetNextItem( -1, LVNI_ALL | LVNI_SELECTED);
m_lstOptions.DeleteItem(iPos);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -