📄 phymemdumpdlg.cpp
字号:
// PhyMemDumpDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "HW_sigal.h"
#include "PhyMemDumpDlg.h"
#include ".\phymemdumpdlg.h"
#include ".\HwReadWrite.h"
// CPhyMemDumpDlg 对话框
IMPLEMENT_DYNAMIC(CPhyMemDumpDlg, CDialog)
CPhyMemDumpDlg::CPhyMemDumpDlg(CWnd* pParent /*=NULL*/)
: CDialog(CPhyMemDumpDlg::IDD, pParent)
, m_strPhyMemAddr(_T(""))
, m_strSize(_T(""))
, m_pReadBuffer(NULL)
{
}
CPhyMemDumpDlg::~CPhyMemDumpDlg()
{
}
void CPhyMemDumpDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT_PHY_ADDRESS, m_strPhyMemAddr);
DDX_Text(pDX, IDC_EDIT_MEM_SIZE, m_strSize);
DDX_Control(pDX, IDC_LIST_MEM_DUMP, c_listMemVal);
}
BEGIN_MESSAGE_MAP(CPhyMemDumpDlg, CDialog)
ON_WM_SHOWWINDOW()
ON_BN_CLICKED(IDC_BUTTON_MEM_DUMP, OnBnClickedButtonMemDump)
END_MESSAGE_MAP()
// CPhyMemDumpDlg 消息处理程序
void CPhyMemDumpDlg::OnShowWindow(BOOL bShow, UINT nStatus)
{
CDialog::OnShowWindow(bShow, nStatus);
// TODO: 在此处添加消息处理程序代码
// Set full row selection
ListView_SetExtendedListViewStyleEx(c_listMemVal.GetSafeHwnd(), LVS_EX_FULLROWSELECT , LVS_EX_FULLROWSELECT);
CRect rect;
this->c_listMemVal.GetClientRect(&rect);
int nInterval = rect.Width()/6;
this->c_listMemVal.InsertColumn(0, _T("Address"), LVCFMT_LEFT, nInterval);
this->c_listMemVal.InsertColumn(1, _T("Values(Hex)"), LVCFMT_LEFT, nInterval*3);
this->c_listMemVal.InsertColumn(2, _T("ASIIC(Text)"), LVCFMT_LEFT, rect.Width()-2*nInterval);
}
void CPhyMemDumpDlg::OnBnClickedButtonMemDump()
{
// TODO: 在此添加控件通知处理程序代码
PBYTE phyAddress;
WORD mapSize;
//char* pReadBuff = NULL;
this->UpdateData(TRUE);
phyAddress = (PBYTE)_tcstoul(this->m_strPhyMemAddr, 0, 16);
mapSize = (WORD)_tcstoul(this->m_strSize, 0, 16);
if(m_pReadBuffer)
{
delete [] m_pReadBuffer;
}
if(mapSize > 0x10000)
{
MessageBox("Error Parameter");
return;
}
else
{
m_pReadBuffer = new BYTE[mapSize];
}
gpHwRw->GetMemoryData(phyAddress, mapSize, m_pReadBuffer);
ShowMemoryData(phyAddress, mapSize, m_pReadBuffer);
}
int CPhyMemDumpDlg::ShowMemoryData(PBYTE baseAddress, unsigned long rSize, PBYTE pBuffer)
{
LV_ITEM lvi;
TCHAR szItem[256];
lvi.mask = LVIF_TEXT;
for(int i=0; i < (int)rSize/16; i++)
{
// First item
lvi.iItem = i;
lvi.iSubItem = 0;
_stprintf(szItem, _T("%08x"), baseAddress+i*16);
lvi.pszText = szItem;
c_listMemVal.InsertItem(&lvi);
// SubItem 1
lvi.iSubItem = 1;
for(int offset = 0 ; offset < 16; offset++)
{
for(int j=0; j<2; j++)
{
_stprintf(szItem+offset*2+j, _T("%01x"), (pBuffer[i*16 + offset]>>((1-j)*4))&0x0F );
}
}
CString strTemp = CString(szItem);
strTemp.MakeUpper();
lvi.pszText = strTemp.GetBuffer();
c_listMemVal.SetItem(&lvi);
// SubItem 2
lvi.iSubItem = 2;
for(int offset=0; offset < 16; offset++)
{
if(pBuffer[i*16 + offset]>31 && pBuffer[i*16 + offset] != 127)
{
sprintf(szItem+offset, _T("%c"), pBuffer[i*16 + offset]);
}
else
{
szItem[offset] = '.';
}
}
szItem[16] = 0;
lvi.pszText = _T(szItem);
c_listMemVal.SetItem(&lvi);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -