亚洲欧美第一页_禁久久精品乱码_粉嫩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灌醉迷j高跟美女| 精品国产乱码久久久久久浪潮| 一区二区三区中文字幕在线观看| 久久精品久久综合| 欧美中文字幕一二三区视频| 日本一区二区成人| 激情五月婷婷综合| 欧美一区二区观看视频| 最新日韩av在线| 国产成人av电影免费在线观看| 777色狠狠一区二区三区| 有坂深雪av一区二区精品| 成人开心网精品视频| 久久久国产精品不卡| 成人黄色在线看| 精品国产乱码久久久久久影片| 天天影视涩香欲综合网| 欧美综合色免费| 亚洲日本va午夜在线影院| 国产福利一区二区三区视频在线 | 国产午夜精品美女毛片视频| 日韩国产精品久久| 7777精品伊人久久久大香线蕉超级流畅 | 国产精品影视在线| 日韩一级欧美一级| 日本成人在线电影网| 6080日韩午夜伦伦午夜伦| 亚洲中国最大av网站| 在线观看av不卡| 午夜电影一区二区三区| 欧美图区在线视频| 日韩精品成人一区二区在线| 国产精品国产三级国产aⅴ中文| 欧美午夜寂寞影院| 亚洲女与黑人做爰| 91香蕉视频在线| 亚洲美女偷拍久久| 在线中文字幕一区二区| 一区二区三区波多野结衣在线观看| 色综合久久久网| 亚洲国产成人91porn| 欧美国产禁国产网站cc| 国产成人av影院| 最近日韩中文字幕| 精品1区2区3区| 懂色av一区二区在线播放| 欧美激情在线免费观看| 99久久精品99国产精品| 亚洲综合在线视频| 欧美丰满高潮xxxx喷水动漫| 精品一区二区影视| 中文字幕在线不卡国产视频| 在线观看日韩精品| 国产美女一区二区| 欧美一区2区视频在线观看| 麻豆精品久久久| 欧美国产一区二区在线观看| 在线免费观看一区| 日韩av一级电影| 国产免费成人在线视频| 色一情一乱一乱一91av| 捆绑紧缚一区二区三区视频 | 久久精品国产亚洲a| 久久蜜桃av一区精品变态类天堂 | 国产美女精品在线| 亚洲日穴在线视频| 日韩精品影音先锋| av亚洲产国偷v产偷v自拍| 视频一区在线播放| 国产精品美女久久久久高潮| 欧美日韩1234| 成人性生交大片免费看视频在线| 亚洲成人av资源| 欧美国产精品一区| 欧美韩国日本综合| 欧美男生操女生| 成人app在线观看| 久久福利视频一区二区| 亚洲宅男天堂在线观看无病毒| 欧美精品一区二区三| 欧美无砖专区一中文字| 波多野结衣在线aⅴ中文字幕不卡| 日韩高清欧美激情| 一区二区高清视频在线观看| 国产午夜精品理论片a级大结局| 在线播放视频一区| 在线观看日韩高清av| caoporen国产精品视频| 精品一区二区三区久久久| 亚洲国产视频一区| 亚洲色图.com| 国产日韩av一区二区| 日韩一区二区三区电影在线观看 | 精品人伦一区二区色婷婷| 色婷婷国产精品久久包臀| 国产成人午夜99999| 蜜桃av一区二区在线观看| 色八戒一区二区三区| 自拍偷拍欧美激情| 精品国产网站在线观看| 91精品国产欧美一区二区| 日本精品一级二级| 国产成人一级电影| 国产在线播精品第三| 免费看欧美女人艹b| 亚洲成人1区2区| 亚洲一级不卡视频| 亚洲成人av一区| 午夜av一区二区| 亚洲自拍与偷拍| 亚洲国产精品综合小说图片区| 亚洲欧美日韩国产另类专区| 综合中文字幕亚洲| 亚洲女女做受ⅹxx高潮| 亚洲激情一二三区| 亚洲国产精品人人做人人爽| 一区二区成人在线视频 | 亚洲地区一二三色| 亚洲高清久久久| 天堂影院一区二区| 免费观看30秒视频久久| 麻豆国产精品一区二区三区 | 亚洲一区二区在线视频| 亚洲自拍偷拍图区| 懂色av一区二区三区蜜臀| 国产高清亚洲一区| 99视频超级精品| 91女神在线视频| 欧美唯美清纯偷拍| 欧美一区二区三区四区五区| 精品久久一二三区| 国产精品天天摸av网| 一区二区在线观看免费视频播放| 亚洲成人资源网| 韩国一区二区三区| 成人国产免费视频| 欧美日韩国产一区| 欧美成人欧美edvon| 欧美激情综合在线| 亚洲裸体xxx| 美女视频黄 久久| 成人性色生活片| 在线观看亚洲精品| 精品国产三级电影在线观看| 中文字幕在线观看一区二区| 久久国产精品色| 91丨九色丨国产丨porny| 欧美另类z0zxhd电影| 国产丝袜美腿一区二区三区| 亚洲精品美腿丝袜| 国内外成人在线| 在线精品视频小说1| 久久久久久久综合| 亚洲动漫第一页| 成人性色生活片| 91精品国产综合久久福利软件| 中文字幕欧美国产| 免费成人在线影院| 色婷婷国产精品| 国产欧美一区视频| 午夜欧美大尺度福利影院在线看| 国产精品乡下勾搭老头1| 欧美日韩一区二区在线观看| 国产日产欧美一区二区三区| 日韩电影一区二区三区四区| 91首页免费视频| √…a在线天堂一区| 久久精品国产77777蜜臀| 在线影院国内精品| 中文字幕精品一区二区精品绿巨人 | 91精品中文字幕一区二区三区| 中文欧美字幕免费| 精品制服美女久久| 911精品国产一区二区在线| 亚洲婷婷国产精品电影人久久| 极品美女销魂一区二区三区| 欧美乱妇20p| 亚洲一区二区三区免费视频| 91视视频在线观看入口直接观看www | 中文av一区特黄| 国产剧情一区二区三区| 欧美一区二区三区四区视频| 亚洲午夜免费电影| 91日韩精品一区| 中文字幕免费不卡| 国产激情一区二区三区四区| 精品美女被调教视频大全网站| 婷婷激情综合网| 欧美曰成人黄网| 亚洲精品免费在线播放| 91麻豆产精品久久久久久| 国产精品久久久久天堂| 成人动漫中文字幕| 中文字幕av免费专区久久| 粉嫩av亚洲一区二区图片| 亚洲午夜视频在线| 欧美日韩成人综合天天影院|