亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? detailview.cpp

?? 一個對wince的注冊表進行操作的源代碼。
?? CPP
字號:
// DetailView.cpp : implementation file
//

#include "stdafx.h"
#include "redit.h"
#include "mainfrm.h"
#include "DetailView.h"
#include "dlgdata.h"
#include "DlgAddValue.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDetailView

IMPLEMENT_DYNCREATE(CDetailView, CListView)

CDetailView::CDetailView()
{
}

CDetailView::~CDetailView()
{
}


BEGIN_MESSAGE_MAP(CDetailView, CListView)
	//{{AFX_MSG_MAP(CDetailView)
	ON_WM_DESTROY()
	ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)
	ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
	ON_WM_LBUTTONDOWN()
	//}}AFX_MSG_MAP
	ON_COMMAND(ID_TEST_NEW_STRINGVALUE, OnAddString)
	ON_COMMAND(ID__DELETE, OnDeleteValue)
	ON_COMMAND(ID_TEST_NEW_DWORDVALUE, OnAddDword)
	ON_COMMAND(ID_TEST_MODIFY, OnModify)
#if defined(_WIN32_WCE) 
#if !defined(_X86_) && !defined(WIN32_PLATFORM_HPC2000)
	ON_NOTIFY_REFLECT(GN_CONTEXTMENU, OnContextMenu)
#endif
#endif
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDetailView drawing
void CDetailView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CDetailView diagnostics

#ifdef _DEBUG
void CDetailView::AssertValid() const
{
	CListView::AssertValid();
}

void CDetailView::Dump(CDumpContext& dc) const
{
	CListView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDetailView message handlers

static LPTSTR RegTypeNameFromType(DWORD dwType)
{
	switch (dwType)
	{
	case REG_SZ:
		return _T("REG_SZ");
	case REG_DWORD:
		return _T("REG_DWORD");
	case REG_MULTI_SZ:
		return _T("REG_MULTI_SZ");
	case REG_BINARY:
		return _T("REG_BINARY");
	case REG_EXPAND_SZ:
		return _T("REG_EXPAND_SZ");
	default:
		return _T("UNKNOWN");	
	}
}

static LPTSTR ShortFormStrForValue(const CRegNode *pNode, CString &strTemp)
{
	LPTSTR szVal = 0;
	if (!pNode->m_lpData)
	{
		strTemp = TEXT("(Null)");
		szVal = strTemp.GetBuffer(0);
	}
	else if (pNode->m_dwDataType == REG_SZ || pNode->m_dwDataType == REG_EXPAND_SZ)
	{
		szVal = (LPTSTR) pNode->m_lpData;
	}
	else if (pNode->m_dwDataType == REG_DWORD)
	{
		strTemp.Format(_T("0x%X"), *((LPDWORD)pNode->m_lpData));
		szVal = strTemp.GetBuffer(0);
	}
	else if (pNode->m_dwDataType == REG_BINARY)
	{
		strTemp = _T("");
		for (DWORD i = 0; i < pNode->m_dwDataSize && i < 16; ++i)
		{
			CString hd;
			hd.Format(TEXT(" %02X"), pNode->m_lpData[i]);
			strTemp += hd;
		}
		szVal = strTemp.GetBuffer(0) + 1;
	}
	else
	{
		strTemp = _T("Unimplemented!");
		szVal = strTemp.GetBuffer(0);
	}

	return szVal;
}

void CDetailView::AddDetail(CRegNode *pNode)
{
	CListCtrl& list = GetListCtrl();
	CString strTemp;

	int nTotal = list.GetItemCount();
	LVITEM lvi;
	lvi.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
	lvi.iItem = nTotal;
	lvi.iSubItem  = 0;
	lvi.pszText = pNode->m_strName.GetBuffer(0);
	lvi.iImage = (pNode->m_dwDataType == REG_SZ) ? 6 : 11;
	lvi.lParam = (LPARAM)pNode;
	int nIndex = list.InsertItem(&lvi);

	lvi.iSubItem = 1;
	lvi.mask = LVIF_TEXT;
	lvi.pszText = RegTypeNameFromType(pNode->m_dwDataType);
	list.SetItem(&lvi);	

	lvi.iSubItem = 2;
	lvi.mask = LVIF_TEXT;
	lvi.pszText = ShortFormStrForValue(pNode, strTemp);
	list.SetItem(&lvi);	
}

void CDetailView::Clear()
{
	CListCtrl& list = GetListCtrl();
	list.DeleteAllItems();

	if (m_ImageList.GetSafeHandle())
		m_ImageList.DeleteImageList();
}

inline CDetailView *GetListView() 
{ 
#ifndef _WIN32_WCE
	return (CDetailView *)((CMainFrame *)AfxGetMainWnd())->m_SplitWnd.GetPane(0, 1); 
#else
	return (CDetailView *)((CMainFrame *)AfxGetMainWnd())->m_SplitWnd.GetPane(1, 0); 
#endif
}

void CDetailView::OnInitialUpdate() 
{
	CListView::OnInitialUpdate();
	
	Clear();	// if called again

	CListCtrl& list = GetListCtrl();
	list.ModifyStyle(0, LVS_REPORT|LVS_NOSORTHEADER|LVS_SHOWSELALWAYS, 0);

	list.InsertColumn(0, _T("Name"), 25);
	list.InsertColumn(1, _T("Type"), 50);
	list.InsertColumn(2, _T("Data"), 50);
	list.SetColumnWidth(0, 50);
	list.SetColumnWidth(1, 100);
	list.SetColumnWidth(2, 100);
	// TODO: Add your specialized code here and/or call the base class
	m_ImageList.Create(IDB_BITMAP1, 16, 5, RGB(255, 0, 255));
	list.SetImageList(&m_ImageList, TVSIL_NORMAL);
	
	if (m_DetailTrayMenu.LoadMenu(MAKEINTRESOURCE(IDR_MENU_DATACNTXT)))
	{
		m_DetailTraySubMenu.Attach(m_DetailTrayMenu.GetSubMenu(0)->Detach());		
	}
}

void CDetailView::OnDestroy() 
{
	
	// TODO: Add your message handler code here
	Clear();	
	CListView::OnDestroy();
}

void CDetailView::OnDblclk(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CListCtrl& list = GetListCtrl();
	CRegNode *pNode;
	CDlgData dlg;
	NMLISTVIEW *lpNmList = (NMLISTVIEW *)pNMHDR;
	if (lpNmList->iItem >= 0)
		if (pNode = (CRegNode *)list.GetItemData(lpNmList->iItem))
		{
			dlg.m_pNode = pNode;
			if (dlg.DoModal() == IDOK)
			{
				Refresh(lpNmList->iItem, pNode);
			}
		}

	*pResult = 0;
}

void CDetailView::Refresh(UINT nItemId, CRegNode *pNode)
{
	
	CListCtrl& list = GetListCtrl();
	CString strTemp;
	BOOL bRet;
	LVITEM lvi;
	lvi.mask = LVIF_TEXT;
	lvi.iItem = nItemId;
	lvi.iSubItem = 0;
	lvi.pszText = (LPTSTR)(LPCTSTR)pNode->m_strName;
	bRet = list.SetItem(&lvi);	

	lvi.iSubItem = 1;
	lvi.pszText = RegTypeNameFromType(pNode->m_dwDataType);
	bRet = list.SetItem(&lvi);	

	lvi.iSubItem = 2;
	lvi.mask = LVIF_TEXT;
	lvi.pszText = ShortFormStrForValue(pNode, strTemp);
	bRet = list.SetItem(&lvi);	
}

void CDetailView::DisplayValues(CRegNode *pNode)
{
	CRegNode *pTemp;
	m_pCurrentNode = pNode;
	pTemp = pNode->m_pFirstChild;
	
	CListCtrl& list = GetListCtrl();
	list.DeleteAllItems();
	list.InsertColumn(0, _T("Name"), 25);
	list.InsertColumn(1, _T("Type"), 50);
	list.InsertColumn(2, _T("Data"), 50);
	list.SetColumnWidth(0, 50);
	list.SetColumnWidth(1, 100);
	list.SetColumnWidth(2, 100);

	while (pTemp)
	{
		if (pTemp->m_dwType & REGNODE_TYPE_VALUE)
		{
			AddDetail(pTemp);
		}
		pTemp = pTemp->m_pNextSibling;
	}
}

void CDetailView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CPoint point;
	UINT Flags = 0;
	CListCtrl& list = GetListCtrl();

	GetCursorPos(&point);

	BOOL bRet = m_DetailTraySubMenu.TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this, NULL);
	list.ScreenToClient(&point);
	m_nItemIndex = list.HitTest(point, &Flags);

	*pResult = 0;
}

void CDetailView::OnAddString()
{
	CDlgAddValue dlg;
	LONG lRet = 0;
	CRegNode *pNode = NULL;
	LPBYTE lpData;
	DWORD dwDataSize = 0, dwDataType;
	HKEY hKey;
	dlg.m_dwDataType = REG_SZ;
	if (dlg.DoModal() == IDOK)
	{				
		CString strValueName;

		strValueName = dlg.m_strValueName;
		hKey = m_pCurrentNode->GetKeyHandle();
		if (RegQueryValueEx(hKey, strValueName, 0, &dwDataType, NULL, &dwDataSize) == ERROR_SUCCESS)
		{
			AfxMessageBox(_T("Value of this name already exists!"));
			return;
		}
		dwDataSize = (dlg.m_strValueData.GetLength() + 1)* sizeof(TCHAR);
		lpData = new BYTE[dwDataSize];
		_tcscpy((TCHAR *)lpData, (LPCTSTR)dlg.m_strValueData);
		if (hKey)
		{
			lRet = RegSetValueEx(hKey, (LPCTSTR)strValueName, 0, REG_SZ, (LPBYTE)lpData, dwDataSize);
			if (lRet == ERROR_SUCCESS)
			{
				pNode = new CRegNode(strValueName, REGNODE_TYPE_VALUE);
				pNode->m_dwDataType = REG_SZ;
				pNode->m_lpData = lpData;
				pNode->m_dwDataSize = dwDataSize;
				AddNode(pNode, m_pCurrentNode);
				DisplayValues(m_pCurrentNode);
			}
			else
			{
				CString strTemp;
				strTemp.Format(_T("Add String Value failed, Err = %ld!"), lRet);
				AfxMessageBox(strTemp);
				delete lpData;
			}
			RegCloseKey(hKey);
		}
	}
}

void CDetailView::OnDeleteValue()
{
	LONG lRet = 0;
	CRegNode *pNode = NULL;
	CString strTemp;

	CListCtrl& list = GetListCtrl();

	if (m_nItemIndex < 0)
		return;
	pNode = (CRegNode *)list.GetItemData(m_nItemIndex);
	strTemp.Format(_T("Do you really want to delete this value (%s)?"), (LPCTSTR)pNode->m_strName);
	if (AfxMessageBox(strTemp, MB_YESNO) == IDYES)
	{				
		HKEY hKey = m_pCurrentNode->GetKeyHandle();
		lRet = RegDeleteValue(hKey, (LPCTSTR)pNode->m_strName);
		if (lRet == ERROR_SUCCESS)
		{
			DeleteNode(pNode);
			DisplayValues(m_pCurrentNode);
		}
		RegCloseKey(hKey);
	}
}

void CDetailView::OnAddDword()
{
	CDlgAddValue dlg;
	LONG lRet = 0;
	CRegNode *pNode = NULL;
	LPBYTE lpData;
	DWORD dwDataSize = 0, dwData = 0, dwDataType;
	HKEY hKey;

	dlg.m_dwDataType = REG_DWORD;
	if (dlg.DoModal() == IDOK)
	{				
		CString strValueName;

		strValueName = dlg.m_strValueName;
		hKey = m_pCurrentNode->GetKeyHandle();
		if (RegQueryValueEx(hKey, strValueName, 0, &dwDataType, NULL, &dwDataSize) == ERROR_SUCCESS)
		{
			AfxMessageBox(_T("Value of this name already exists!"));
			return;
		}
		dwDataSize = sizeof(DWORD);
		lpData = new BYTE[dwDataSize];
		*((DWORD *)lpData) = _ttol((LPCTSTR)dlg.m_strValueData);
		lRet = RegSetValueEx(hKey, (LPCTSTR)strValueName, 0, REG_DWORD, (LPBYTE)lpData, dwDataSize);
		if (lRet == ERROR_SUCCESS)
		{
			pNode = new CRegNode(strValueName, REGNODE_TYPE_VALUE);
			pNode->m_dwDataType = REG_DWORD;
			pNode->m_lpData = lpData;
			pNode->m_dwDataSize = dwDataSize;
			AddNode(pNode, m_pCurrentNode);
			DisplayValues(m_pCurrentNode);
		}
		else
		{
			CString strTemp;
			strTemp.Format(_T("Add DWORD Value failed, Err = %ld!"), lRet);
			AfxMessageBox(strTemp);
			delete lpData;
		}
		RegCloseKey(hKey);
	}
}

void CDetailView::OnModify()
{

	CListCtrl& list = GetListCtrl();
	CRegNode *pNode = NULL;

	if (m_nItemIndex < 0)
		return;
	pNode = (CRegNode *)list.GetItemData(m_nItemIndex);
	CDlgData dlg;
	if (pNode = (CRegNode *)list.GetItemData(m_nItemIndex))
	{
		dlg.m_pNode = pNode;
		if (dlg.DoModal() == IDOK)
		{
			Refresh(m_nItemIndex, pNode);
		}
	}
}

void CDetailView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	CListCtrl& list = GetListCtrl();
	UINT Flags;

	m_nItemIndex = list.HitTest(point, &Flags);
	if (m_nItemIndex < 0)
		return;
#if defined(_WIN32_WCE) 
#if !defined(_X86_) && !defined(WIN32_PLATFORM_HPC2000)
	m_PtGesture = point;
	ClientToScreen(&m_PtGesture);
	SHRecognizeGesture(point, TRUE);
#endif
#endif
	CListView::OnLButtonDown(nFlags, point);
}

#if defined(_WIN32_WCE) 
#if !defined(_X86_) && !defined(WIN32_PLATFORM_HPC2000)
void CDetailView::OnContextMenu(WPARAM wParam, LPARAM lParam)
{
	NMRGINFO *pInfo = (NMRGINFO *)lParam;
	BOOL bRet = m_DetailTraySubMenu.TrackPopupMenu(TPM_LEFTALIGN, m_PtGesture.x, m_PtGesture.y, this, NULL);
}
#endif
#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人免费在线视频| 亚洲曰韩产成在线| 91精品麻豆日日躁夜夜躁| 99riav一区二区三区| 成人国产精品免费观看动漫| 麻豆国产精品视频| 国产综合久久久久影院| 九九视频精品免费| 国产精品一区二区免费不卡 | av在线不卡网| 不卡视频免费播放| 94-欧美-setu| 99re这里只有精品6| 91麻豆.com| 色婷婷av久久久久久久| 欧美日韩色一区| 在线不卡一区二区| 欧美xxxxx牲另类人与| 国产日韩欧美综合一区| 国产精品美女久久久久久久久| 国产欧美精品一区| 亚洲视频免费看| 丝袜美腿成人在线| 国产麻豆日韩欧美久久| 成人av资源下载| www久久精品| 国产日韩欧美电影| 亚洲精选一二三| 日本亚洲天堂网| 国产精品正在播放| 91成人免费网站| 欧美一区二区三区电影| 亚洲精品一区二区三区香蕉| 久久久综合精品| 欧美国产精品专区| 亚洲人成网站色在线观看| 亚洲综合视频网| 免费一级欧美片在线观看| 午夜精品福利久久久| 美女精品自拍一二三四| 国产一区日韩二区欧美三区| 成人激情小说网站| 欧美体内she精高潮| 激情久久五月天| 99视频在线精品| 538在线一区二区精品国产| 欧美一区二区在线看| 久久香蕉国产线看观看99| 国产精品久久99| 午夜不卡在线视频| 高清在线不卡av| 欧美精品欧美精品系列| 国产色产综合色产在线视频 | 色综合视频一区二区三区高清| 色吧成人激情小说| 欧美一级xxx| 中文字幕国产一区| 性做久久久久久免费观看| 狠狠色狠狠色合久久伊人| 日本乱人伦aⅴ精品| 678五月天丁香亚洲综合网| 国产欧美日韩在线看| 一区二区国产视频| 国内一区二区视频| 欧美日韩在线播放一区| 国产精品成人免费在线| 午夜精品国产更新| 一本久道久久综合中文字幕| 欧美成人性战久久| 一区二区成人在线视频| 国产69精品久久久久毛片 | 亚洲午夜三级在线| 国产一区二区三区美女| 欧美一级黄色片| 亚洲黄色小视频| 成人黄色av网站在线| 精品少妇一区二区三区日产乱码 | 北条麻妃一区二区三区| 欧美大片在线观看一区二区| 一区二区三区不卡视频| av成人动漫在线观看| 久久九九全国免费| 蜜臂av日日欢夜夜爽一区| 欧美日韩高清不卡| 一区二区三区日本| 色综合天天综合网天天看片| 欧美激情一区二区| 国精品**一区二区三区在线蜜桃| 在线观看成人小视频| 亚洲精品日日夜夜| 一本色道a无线码一区v| ...av二区三区久久精品| 国产麻豆成人精品| 精品国产乱码久久久久久影片| 日本不卡视频在线| 欧美日本国产一区| 日韩在线一区二区三区| 91精品国产综合久久久久久漫画 | 色哟哟一区二区在线观看| 国产精品看片你懂得| 国产成人av网站| 国产喂奶挤奶一区二区三区| 成人性视频网站| 国产精品福利一区二区| 成人综合在线网站| 亚洲国产一区二区三区青草影视| 欧美亚洲综合一区| 免费成人在线观看| 久久久久久一二三区| 国产麻豆9l精品三级站| 国产清纯白嫩初高生在线观看91 | 亚洲欧洲中文日韩久久av乱码| 97国产一区二区| 亚洲图片欧美一区| 91精品国产乱| 色婷婷av一区| 另类人妖一区二区av| 2017欧美狠狠色| 99re成人精品视频| 亚洲超丰满肉感bbw| 日韩欧美中文一区| 久久99蜜桃精品| 亚洲一区二区美女| 久久只精品国产| 色婷婷av久久久久久久| 毛片av一区二区| 中文字幕在线一区| 69堂国产成人免费视频| 国产精品小仙女| 亚洲高清中文字幕| 国产女人水真多18毛片18精品视频| 99re66热这里只有精品3直播| 日韩专区中文字幕一区二区| 26uuu久久天堂性欧美| 日本高清视频一区二区| 狠狠色丁香久久婷婷综| 中文字幕日本乱码精品影院| 欧美久久久久久蜜桃| 成人免费看视频| 美女视频第一区二区三区免费观看网站| 国产精一区二区三区| 亚洲国产日韩在线一区模特 | 欧美网站大全在线观看| 国产精品综合一区二区三区| 一区二区三区四区高清精品免费观看| 精品少妇一区二区三区视频免付费| 色一情一伦一子一伦一区| 国产一区二区在线看| 午夜一区二区三区视频| 国产精品久久久久久久久久免费看| 51精品秘密在线观看| 在线免费观看不卡av| 波多野结衣亚洲| 韩国毛片一区二区三区| 日韩激情一二三区| 一区二区成人在线| 亚洲免费在线电影| 在线不卡a资源高清| 色婷婷国产精品| av亚洲精华国产精华精华| 老司机午夜精品| 免费黄网站欧美| 性做久久久久久| 亚洲成av人片一区二区| 亚洲一区二区三区四区五区中文 | 国产午夜久久久久| 91精选在线观看| 欧美性淫爽ww久久久久无| 色哟哟一区二区三区| 麻豆成人久久精品二区三区红| 亚洲第一二三四区| 亚洲一区二区精品视频| 亚洲综合无码一区二区| 日韩美女啊v在线免费观看| 国产精品视频在线看| 国产精品欧美精品| 国产精品国产自产拍高清av | 国产精品久久久久久福利一牛影视| 久久综合丝袜日本网| 久久亚洲精品小早川怜子| 久久亚洲精品小早川怜子| 久久久久久9999| 国产精品久久久久久户外露出| 欧美激情在线一区二区三区| 国产精品久久久久天堂| 久久嫩草精品久久久精品| 日韩三级视频在线观看| 国产亚洲精品资源在线26u| 国产欧美久久久精品影院| 中文字幕在线观看不卡| 亚洲影院理伦片| 日韩av成人高清| 经典三级视频一区| 99久久久免费精品国产一区二区| 在线精品亚洲一区二区不卡| 欧美精品日韩精品| 久久精品视频免费观看| 亚洲欧洲无码一区二区三区| 亚洲国产日韩一区二区| 国内精品伊人久久久久影院对白|