📄 mylistview.cpp
字号:
// MyListView.cpp : implementation file
//
#include "stdafx.h"
#include "RegEdit.h"
#include "MyListView.h"
#include "SetSZValue.h"
#include "SetDWORDValue.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyListView
IMPLEMENT_DYNCREATE(CMyListView, CListView)
CMyListView::CMyListView()
{
}
CMyListView::~CMyListView()
{
}
BEGIN_MESSAGE_MAP(CMyListView, CListView)
//{{AFX_MSG_MAP(CMyListView)
ON_COMMAND(ID_REFRESH, OnRefresh)
ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_DEL, OnDel)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyListView drawing
void CMyListView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CMyListView diagnostics
#ifdef _DEBUG
void CMyListView::AssertValid() const
{
CListView::AssertValid();
}
void CMyListView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyListView message handlers
void CMyListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
CListCtrl& m_Ctrl=GetListCtrl();
CRect rect;
GetClientRect(rect);
int width=rect.Width()/3;
///////////////////////////////////////////////////////////////
DWORD dwStyle = GetWindowLong( m_hWnd,GWL_STYLE);
SetWindowLong( m_hWnd,GWL_STYLE,dwStyle|LVS_REPORT/*|LVS_NOLABELWRAP|LVS_SHOWSELALWAYS*/);
//设置扩展风格
DWORD styles=LVS_EX_FULLROWSELECT;
//Use macro since this is new and not im MFC
ListView_SetExtendedListViewStyleEx(m_hWnd,styles,styles);
// TODO: Add your specialized code here and/or call the base class
m_Ctrl.InsertColumn(0,_T("名称"),LVCFMT_LEFT,width);// ,0);
m_Ctrl.InsertColumn(1,_T("类型"),LVCFMT_LEFT,width );//,1);
m_Ctrl.InsertColumn(2,_T("数据"),LVCFMT_LEFT,width );//,2);
////////////////////////////////////////////////////////////////////
m_ImageList.Create(17, 16,ILC_COLOR, 0, 4);
CBitmap bm;
bm.LoadBitmap(IDB_BITMAP1);
ImageSZ=m_ImageList.Add(&bm, RGB(0, 0, 0));
bm.DeleteObject();
bm.LoadBitmap(IDB_BITMAP2);
ImageDWORD=m_ImageList.Add(&bm, RGB(0, 0, 0));
m_Ctrl.SetImageList(&m_ImageList,LVSIL_SMALL);
}
void CMyListView::DispValue(HKEY hKey)
{
CListCtrl & m_Ctrl=GetListCtrl();
m_Ctrl.DeleteAllItems();
int temp;
LONG iRet=ERROR_SUCCESS;
DWORD dwType,dwNameLength,index,cbMaxValueLen,dwDataLength;
LPBYTE lpData=0;
h_CurentKey=hKey;
if(hKey==NULL) return;
TCHAR NameBuffer[256];
TCHAR DataBuffer[256];
dwType=REG_SZ;//查找类型为字符串型
dwNameLength=sizeof(NameBuffer);//名称长度
CString strData;
index=0;
LV_ITEM item;
item.mask=LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
item.iSubItem=0;
item.iItem=0;
item.iImage=ImageSZ;
iRet = RegQueryInfoKey(hKey,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, &cbMaxValueLen,NULL, NULL);
if (iRet != ERROR_SUCCESS)
{
if (!(hKey == HKEY_LOCAL_MACHINE
||hKey == HKEY_CURRENT_USER
||hKey== HKEY_CLASSES_ROOT
||hKey== HKEY_USERS
))
RegCloseKey(hKey);
return;
}
index=0;
lpData = new BYTE[cbMaxValueLen+2];
memset(lpData,0,cbMaxValueLen+2);
while(iRet==ERROR_SUCCESS)
{
dwDataLength = cbMaxValueLen;
dwNameLength = sizeof(NameBuffer)/sizeof(TCHAR);
memset(lpData,0,cbMaxValueLen+2);
memset(NameBuffer,0,sizeof(NameBuffer));
iRet = RegEnumValue(hKey, index,NameBuffer, &dwNameLength, NULL, &dwType, lpData, &dwDataLength);
if (iRet != ERROR_SUCCESS)
continue;
int i=m_Ctrl.GetItemCount();
switch(dwType)
{
case REG_SZ:
swprintf(DataBuffer,_T("%s"),(LPCTSTR)lpData);
if(wcslen(NameBuffer)==0)
{
wcscpy(NameBuffer,_T("(默认)"));
if(lpData[0]=='0'&&lpData[1]=='0')
wcscpy(DataBuffer,_T("(数值未设置)"));
}
temp=m_Ctrl.InsertItem(i,NameBuffer,ImageSZ);
m_Ctrl.SetItemText (temp,1,_T("REG_SZ"));
m_Ctrl.SetItemText (temp,2,DataBuffer);
break;
case REG_DWORD:
temp=m_Ctrl.InsertItem(i,NameBuffer,ImageDWORD);
m_Ctrl.SetItemText (temp,1,_T("REG_DWORD"));
strData.Format(_T("%x"),*((LPDWORD)lpData));
while(strData.GetLength ()<8)
strData="0"+strData;
swprintf(DataBuffer,_T("0x%s(%ld)"),strData,*((LPDWORD)lpData));
m_Ctrl.SetItemText (temp,2,DataBuffer);
break;
case REG_BINARY:
{
CString strTemp = _T("");
for (DWORD x = 0; x<cbMaxValueLen&& x< 16; ++x)
{
CString hd;
hd.Format(TEXT(" %02X"), lpData[i]);
strTemp += hd;
}
swprintf(DataBuffer,_T("%s"),strTemp);
// szVal = strTemp.GetBuffer(0) + 1;
}
temp=m_Ctrl.InsertItem(i,NameBuffer,ImageDWORD);
m_Ctrl.SetItemText (temp,1,_T("REG_BINARY"));
swprintf(DataBuffer,_T("%s"),(LPCTSTR)lpData);
m_Ctrl.SetItemText (temp,2,DataBuffer);
break;
case REG_NONE:
temp=m_Ctrl.InsertItem(i,NameBuffer,ImageDWORD);
m_Ctrl.SetItemText (temp,1,_T("REG_NONE"));
swprintf(DataBuffer,_T("%s"),(LPCTSTR)lpData);
m_Ctrl.SetItemText (temp,2,DataBuffer);
break;
default:
temp=m_Ctrl.InsertItem(i,NameBuffer,ImageDWORD);
m_Ctrl.SetItemText (temp,1,_T("REG_NONE"));
swprintf(DataBuffer,_T("%s"),(LPCTSTR)lpData);
m_Ctrl.SetItemText (temp,2,DataBuffer);
break;
}
index=index+1;
}
delete [] lpData;
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int j=m_Ctrl.GetItemCount ();
for(int k=0;k<j;k++)
{
m_Ctrl.SetItemData(k,k);
}
m_Ctrl.SortItems(MyCompareProc,(LPARAM)&m_Ctrl);
}
int CALLBACK CMyListView::MyCompareProc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
CListCtrl* pListCtrl = (CListCtrl*) lParamSort;
CString strItem1 = pListCtrl->GetItemText(lParam1, 0);
CString strItem2 = pListCtrl->GetItemText(lParam2, 0);
// return strcmp(strItem2, strItem1);
return wcscmp(strItem1, strItem2);
}
void CMyListView::OnDel()
{
// TODO: Add your command handler code here
CPoint pt;
CListCtrl & m_Ctrl=GetListCtrl();
GetCursorPos(&pt);
ScreenToClient(&pt);
int iItem;
POSITION pos =m_Ctrl.GetFirstSelectedItemPosition();
if (pos == NULL)
TRACE0("No items were selected!\n");
while(pos)
{
iItem=m_Ctrl.GetNextSelectedItem(pos);
CString strValueName=m_Ctrl.GetItemText(iItem,0);
RegDeleteValue(h_CurentKey,(LPCTSTR)strValueName);
}
//MessageBox(_T("On CMyListView Del"),NULL,MB_OK);
DispValue(h_CurentKey);
}
void CMyListView::OnRefresh()
{
// TODO: Add your command handler code here
// MessageBox(_T("MYLIst Refresh"),NULL,MB_OK);
CListCtrl & m_Ctrl=GetListCtrl();
m_Ctrl.DeleteAllItems();
DispValue(h_CurentKey);
}
void CMyListView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
// TODO: Add your message handler code here
CPoint point;
GetCursorPos(&point);
//ScreenToClient(&point);
CListCtrl& m_Ctrl=GetListCtrl();
int iItem=m_Ctrl.HitTest(point,NULL);
POSITION pos = m_Ctrl.GetFirstSelectedItemPosition();
if (pos == NULL)
return;
CMenu menue,*pmenue;
menue.LoadMenu(IDR_MENU1);
pmenue=menue.GetSubMenu (1);
pmenue->TrackPopupMenu( TPM_LEFTALIGN,point.x,point.y,this);
*pResult = 0;
}
void CMyListView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CListCtrl& m_Ctrl=GetListCtrl();
int iHitItem= m_Ctrl.HitTest(point, NULL);
if(iHitItem==-1)
return;
CString strType;
CString strValue,strName;
strName=m_Ctrl.GetItemText (iHitItem,0);
strType=m_Ctrl.GetItemText(iHitItem,1);
strValue=m_Ctrl.GetItemText(iHitItem,2);
if(strType=="REG_SZ")
{
CSetSZValue SetSZValue;
SetSZValue.Disp (h_CurentKey,strName,strValue);
strValue=SetSZValue.m_Value;
// m_Ctrl.SetItemText (iHitItem,2,(LPCSTR)strValue);
}
if(strType=="REG_DWORD")
{
CSetDWORDValue SetDword;
SetDword.Disp(h_CurentKey,strName,strValue);
//strValue.Format ("%ul",SetDword.m_Value);
}
DispValue(h_CurentKey);
CListView::OnLButtonDblClk(nFlags, point);
}
void CMyListView::OnDell()
{
OnDel();
}
void CMyListView::OnSize(UINT nType, int cx, int cy)
{
CListView::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
CListCtrl& m_Ctrl=GetListCtrl();
CRect rect;
GetClientRect(rect);
int width=rect.Width()/3;
if(width>100)
{
m_Ctrl.SetColumnWidth (0,width);
m_Ctrl.SetColumnWidth (1,width);
m_Ctrl.SetColumnWidth(2,width);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -