📄 reglist.cpp
字号:
// RegList.cpp: implementation of the CRegList class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "iic.h"
#include "IICDlg.h"
#include "RegList.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRegList::CRegList()
{
MaxRowLength = 0;
}
CRegList::~CRegList()
{
}
BEGIN_MESSAGE_MAP(CRegList, gxListCtrl)
//{{AFX_MSG_MAP(gxListCtrl)
ON_NOTIFY_REFLECT(LVN_ENDLABELEDIT, OnEndLabelEdit)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
void CRegList::Show()
{
DeleteAllItems( );
Init();
int nItem,sum;
CString str,strtmp;
for(int i=0;i<m_Data.GetSize();i++){
sum = m_Data.GetRowLength(i);
if(MaxRowLength<sum)
{
for(int t = MaxRowLength;t<sum;t++)
{
strtmp.Format("%03d",t-1);
InsertColumn(t+1,strtmp,LVCFMT_LEFT,40);
}
MaxRowLength = sum;
}
nItem = InsertItem(i,m_Data.GetName(i)); // 插入第一列
for(int j=0;j<sum;j++){
if(m_bHex)
str.Format("%02X",m_Data.GetValue(i,j));
else
str.Format("%03d",m_Data.GetValue(i,j));
SetItemText(nItem,j+1,str); // 插入第二列
}
}
return;
}
void CRegList::Init()
{
for(int k = 0;k<MaxRowLength+1;k++)
{
DeleteColumn(0);
}
MaxRowLength = 0;
InsertColumn(0,"Name",LVCFMT_LEFT,80);
InsertColumn(1,"Addr",LVCFMT_LEFT,60);
InsertColumn(2,"Reg",LVCFMT_LEFT,50);
CString str;
// for(int j=1;j<256;j++){
for(int j=1;j<8;j++){
str.Format("%03d",j);
InsertColumn(j+2,str,LVCFMT_LEFT,40);
}
MaxRowLength = 9;
// 设置列表控件扩展样式为整行高亮
SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES );
// SetExtendedStyle( LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES | LVS_EX_UNDERLINEHOT | LVS_SHOWSELALWAYS |
// LVS_EX_FLATSB | LVS_EX_INFOTIP | LVS_EX_CHECKBOXES );
//LVS_EX_TRACKSELECT |
// 往列表控件中添加项目
return;
}
void CRegList::OnEndLabelEdit (NMHDR* pNMHDR, LRESULT* pResult)
{
LV_DISPINFO *plvDispInfo = (LV_DISPINFO *)pNMHDR;
LV_ITEM *plvItem = &plvDispInfo->item;
CString str(plvItem->pszText);
int len = str.GetLength();
BYTE val=0;
char* p;
// if (plvItem->pszText != NULL)
if(len>0)
{
if(plvItem->iSubItem==0){
SetItemText (plvItem->iItem, plvItem->iSubItem, str);
m_Data.SetName(plvItem->iItem,str);
}
else{
CString strA;
strA = GetItemText(plvItem->iItem,plvItem->iSubItem -1);
if (strlen(strA)==0){
return;
}
if(m_bHex){
val = strtoul(str,&p,16);
str.Format ("%02X", val);
}
else{
val = strtoul(str,&p,10);
str.Format ("%03d", val);
}
SetItemText (plvItem->iItem, plvItem->iSubItem, str);
m_Data.SetValue(plvItem->iItem,plvItem->iSubItem -1,val);
}
}
*pResult = FALSE;
}
/*
void CRegList::OnLButtonDown (UINT nFlags, CPoint Point)
{
gxListCtrl::OnLButtonDown (nFlags, Point);
int Index;
int ColNum;
Index = HitTestEx (Point, &ColNum);
return;
if ((Index = HitTestEx (Point, &ColNum)) != -1)
{
if (GetWindowLong (m_hWnd, GWL_STYLE) & LVS_EDITLABELS)
EditSubItem (Index, ColNum);
}
}
*/
int CRegList::InsertItemEx(int Item)
{
int Result = InsertItem (Item + 1, "NewReg");
CString ItemVal, Temp;
char* p;
if (Item == 0)
ItemVal = "1000";
else
{
BYTE HexVal;
Temp = GetItemText (Item - 1, 1);
if(m_bHex){
HexVal = strtoul(Temp,&p,16)+1;
ItemVal.Format ("%02X", HexVal);
}
else{
HexVal = strtoul(Temp,&p,10)+1;
ItemVal.Format ("%03d", HexVal);
}
}
SetItemText (Item, 1, ItemVal);
SetColumnWidth (2, LVSCW_AUTOSIZE_USEHEADER);
m_Data.AddRow();
m_Data.SetName(Item,GetItemText(Item,0));
CString str = GetItemText(Item,1);
int number;
hexNumberToInt(str,number);
m_Data.SetValue(Item,0,number);
return Result;
}
void CRegList::SaveScroll(int m_iScrollRow,BYTE val)
{
int column = m_Data.GetRowLength(m_iScrollRow) - 1;
m_Data.SetValue(m_iScrollRow,column,val);
CString str;
str.Format("%02X",val);
this->SetItemText(m_iScrollRow,column+1,str);
return;
}
void CRegList::SaveRegAddr(int m_iScrollRow, BYTE val)
{
m_Data.SetValue(m_iScrollRow,1,val);
CString str;
if(m_bHex)
str.Format("%02X",val);
else
str.Format("%03d",val);
SetItemText(m_iScrollRow,2,str);
return;
}
void CRegList::SaveRegName(int m_iScrollRow, CString str)
{
m_Data.SetName(m_iScrollRow,str);
SetItemText(m_iScrollRow,0,str);
}
void CRegList::SaveNote(int m_iScrollRow, CString str)
{
m_Data.SetNote(m_iScrollRow,str);
}
void CRegList::DeleteRow(int row)
{
m_Data.DeleteRow(row);
if(m_Data.GetSize()==0) m_Data.AddRow();
Show();
}
void CRegList::SaveIICAddr(int m_iScrollRow, BYTE val)
{
m_Data.SetValue(m_iScrollRow,0,val);
CString str;
if(m_bHex)
str.Format("%02X",val);
else
str.Format("%03d",val);
SetItemText(m_iScrollRow,1,str);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -