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

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

?? detailview.cpp

?? 注冊表程序。 1 一個規(guī)范的注冊表程序
?? 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一区二区三区免费野_久草精品视频
日韩极品在线观看| 日韩综合小视频| 亚洲综合在线免费观看| 色综合久久综合网欧美综合网| 日本中文字幕一区| 天天av天天翘天天综合网 | 成人永久aaa| 狠狠色狠狠色综合系列| 日韩 欧美一区二区三区| 99久久久久久| 色婷婷久久久综合中文字幕| 精品久久久久一区| 日韩视频免费观看高清完整版在线观看 | 精品欧美一区二区三区精品久久 | 久久久99久久| xf在线a精品一区二区视频网站| 精品国产乱码久久久久久闺蜜| 国产视频一区在线观看| 日本不卡不码高清免费观看| 久久99热99| 国产成人综合视频| 色悠久久久久综合欧美99| 国产婷婷色一区二区三区四区| 奇米在线7777在线精品| 欧美天天综合网| 日韩女优视频免费观看| 中文字幕一区av| 亚洲影院久久精品| 色香蕉久久蜜桃| 亚洲色图一区二区| 久久99热这里只有精品| 欧美不卡一二三| 激情深爱一区二区| 久久午夜国产精品| 国产激情一区二区三区四区 | 在线电影一区二区三区| 精品久久久久一区| 国产麻豆视频一区二区| 色老汉av一区二区三区| 精品对白一区国产伦| 极品少妇xxxx精品少妇| 欧美亚洲日本一区| 日韩电影网1区2区| 日韩精品一区二区三区视频播放| 美女一区二区三区| 色94色欧美sute亚洲线路一久 | av亚洲精华国产精华| 日韩一区二区不卡| 寂寞少妇一区二区三区| 国产欧美精品一区二区三区四区| 亚洲影院免费观看| 日韩一区二区视频| 国产精品99久久久久久有的能看| 欧美美女视频在线观看| 免费精品视频在线| 久久久久九九视频| 激情小说亚洲一区| 国产精品的网站| 国产高清亚洲一区| 最新国产精品久久精品| 欧美日韩一区小说| 亚洲美女在线一区| 99精品一区二区三区| 亚洲va中文字幕| 精品视频免费看| 国产揄拍国内精品对白| 亚洲精品亚洲人成人网| 91美女片黄在线观看| 中文字幕欧美激情一区| 经典一区二区三区| 亚洲欧美日韩在线播放| 欧美tk丨vk视频| 色婷婷av一区| 国产精品1区2区3区| 亚洲一区在线播放| 国产亚洲制服色| 在线成人免费观看| www.综合网.com| 美国十次了思思久久精品导航| 亚洲欧美激情插| 久久午夜国产精品| 91精品国产一区二区| 麻豆国产精品官网| 一区二区三区四区视频精品免费| 亚洲精品在线一区二区| 欧美日韩精品一区二区三区蜜桃| 午夜久久久久久久久| 中文av一区特黄| 91丨九色丨蝌蚪丨老版| 激情五月播播久久久精品| 偷拍亚洲欧洲综合| 一区二区三区久久| 国产精品美日韩| 国产亚洲精品中文字幕| 欧美一区二区三区婷婷月色| 色综合色狠狠天天综合色| 成人精品亚洲人成在线| 国产剧情av麻豆香蕉精品| 久久精品久久久精品美女| 亚洲成人综合网站| 亚洲激情av在线| 国产精品第五页| 中文字幕日韩av资源站| 中文字幕av免费专区久久| 久久新电视剧免费观看| 精品福利av导航| 精品免费日韩av| 日韩三级在线观看| 欧美成人三级电影在线| 日韩精品一区在线| 欧美变态tickling挠脚心| 91精品国产综合久久久久| 韩国成人精品a∨在线观看| 捆绑调教一区二区三区| 美女视频网站黄色亚洲| 久久国产生活片100| 久久不见久久见免费视频7| 日本不卡高清视频| 黄网站免费久久| 国产精品一区二区三区乱码| 国产乱码精品一品二品| 国产成人亚洲综合a∨婷婷 | 中文字幕免费不卡| 久久精品男人的天堂| 国产精品毛片无遮挡高清| 中文字幕免费不卡| 亚洲激情六月丁香| 日本在线播放一区二区三区| 理论电影国产精品| 成人免费视频视频在线观看免费| 成人av网站在线| 国产一区在线观看麻豆| 国产白丝网站精品污在线入口 | 亚洲综合一区二区| 亚洲国产日韩a在线播放| 久久久久免费观看| 中文字幕精品在线不卡| 亚洲最新视频在线观看| 日本vs亚洲vs韩国一区三区二区| 久久爱www久久做| 成人av动漫网站| 欧美日韩国产一区二区三区地区| 日韩一区二区三区四区| 欧美国产1区2区| 亚洲综合999| 国产在线精品一区二区| 91免费国产在线| 日韩欧美一区二区视频| 国产精品情趣视频| 肉色丝袜一区二区| 国产伦精一区二区三区| 91视频一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 中文字幕一区二区三区色视频| 亚洲成人高清在线| jlzzjlzz亚洲女人18| 日韩三级中文字幕| 亚洲一区二区三区小说| 国产综合色在线视频区| 91麻豆国产福利精品| 精品区一区二区| 亚洲成人7777| 99国产精品99久久久久久| 欧美电影免费观看高清完整版在 | 欧美激情一区二区在线| 日本午夜一区二区| 91原创在线视频| 国产日韩欧美不卡在线| 日韩电影在线观看一区| 色综合久久中文综合久久牛| 国产欧美日韩另类一区| 蜜桃av噜噜一区二区三区小说| 在线免费观看一区| 欧美日韩国产区一| 亚洲欧洲一区二区在线播放| 免费在线一区观看| 欧美日免费三级在线| 中文字幕中文乱码欧美一区二区| 久久激情综合网| 91精品国产综合久久婷婷香蕉 | 国产亚洲女人久久久久毛片| 欧美蜜桃一区二区三区| 欧洲精品一区二区| 日本va欧美va瓶| 爽好久久久欧美精品| 国产一区在线看| 欧美一级一区二区| 亚洲国产成人高清精品| 在线观看区一区二| 成人免费在线播放视频| 国产精品自拍一区| 日韩欧美一区二区视频| 免费看欧美女人艹b| 日韩女优av电影| 免费欧美在线视频| 精品乱码亚洲一区二区不卡| 免费观看久久久4p| 欧美一二三四在线| 久久精工是国产品牌吗| 精品国产露脸精彩对白|