// reditView.cpp : implementation of the CReditView class
//
#include "stdafx.h"
#include "redit.h"
#include "mainfrm.h"
#include "detailview.h"
#include "reditDoc.h"
#include "reditView.h"
#include "DlgCreateKey.h"
#include "DlgRenameKey.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CReditView
IMPLEMENT_DYNCREATE(CReditView, CTreeView)
BEGIN_MESSAGE_MAP(CReditView, CTreeView)
//{{AFX_MSG_MAP(CReditView)
ON_NOTIFY_REFLECT(TVN_ITEMEXPANDED, OnItemexpanded)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
ON_WM_DESTROY()
ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
// Standard printing commands
#ifndef _WIN32_WCE
ON_COMMAND(ID_FILE_PRINT, CTreeView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CTreeView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CTreeView::OnFilePrintPreview)
#endif
ON_COMMAND(ID_TREERCLICK_NEW_KEY, OnCreateNewKey)
ON_COMMAND(ID_TREERCLICK_NEW_STRINGVALUE, OnNewStringValue)
ON_COMMAND(ID_TREERCLICK_NEW_DWORDVALUE, OnNewDwordValue)
ON_COMMAND(ID_TREERCLICK_DELETE, OnKeyDelete)
ON_COMMAND(ID_TREERCLICK_RENAME, OnKeyRename)
ON_MESSAGE(MW_SHOWKEYPATH, OnShowKeyPath)
ON_MESSAGE(MW_COPYKEYPATH, OnCopyKeyPath)
ON_MESSAGE(MW_REFRESH, OnViewRefresh)
#if defined(_WIN32_WCE)
#if !defined(_X86_) && !defined(WIN32_PLATFORM_HPC2000)
ON_NOTIFY_REFLECT(GN_CONTEXTMENU, OnContextMenu)
#endif
#endif
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CReditView construction/destruction
CReditView::CReditView()
{
// TODO: add construction code here
}
CReditView::~CReditView()
{
}
BOOL CReditView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CTreeView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CReditView drawing
void CReditView::OnDraw(CDC* pDC)
{
CReditDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
#ifndef _WIN32_WCE
/////////////////////////////////////////////////////////////////////////////
// CReditView printing
BOOL CReditView::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CReditView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CReditView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
#endif
/////////////////////////////////////////////////////////////////////////////
// CReditView diagnostics
#ifdef _DEBUG
void CReditView::AssertValid() const
{
CTreeView::AssertValid();
}
void CReditView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
CReditDoc* CReditView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CReditDoc)));
return (CReditDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CReditView message handlers
void CReditView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
Clear();
CTreeCtrl &treeCtl = GetTreeCtrl();
treeCtl.ModifyStyle(0, TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS);
m_ImageList.Create(IDB_BITMAP1, 16, 5, RGB(255, 0, 255));
treeCtl.SetImageList(&m_ImageList, TVSIL_NORMAL);
CRegNode *pnodeItem, *pnodeItemParent;
pnodeItemParent = new CRegNode(_T("Local Device"), REGNODE_TYPE_KEY|REGNODE_TYPE_TOPMOST);
::AddNode(pnodeItemParent, NULL);
pnodeItem = new CRegNode(_T("HKEY_CLASSES_ROOT"), REGNODE_TYPE_KEY|REGNODE_TYPE_ROOT);
::AddNode(pnodeItem, pnodeItemParent);
pnodeItem = new CRegNode(_T("HKEY_CURRENT_USER"), REGNODE_TYPE_KEY|REGNODE_TYPE_ROOT);
::AddNode(pnodeItem, pnodeItemParent);
pnodeItem = new CRegNode(_T("HKEY_LOCAL_MACHINE"), REGNODE_TYPE_KEY|REGNODE_TYPE_ROOT);
::AddNode(pnodeItem, pnodeItemParent);
pnodeItemParent->m_hItem = treeCtl.InsertItem(pnodeItemParent->m_strName, 31, 12, TVI_ROOT);
pnodeItemParent->m_bLoaded = TRUE;
treeCtl.SetItemData(pnodeItemParent->m_hItem, (DWORD)pnodeItemParent);
DisplayKey(pnodeItemParent);
if (m_TreeTrayMenu.LoadMenu(MAKEINTRESOURCE(IDR_MENU_TREERCLICK)))
{
m_TreeTraySubMenu.Attach(m_TreeTrayMenu.GetSubMenu(0)->Detach());
}
}
void CReditView::OnItemexpanded(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
if (pNMTreeView && pNMTreeView->itemNew.hItem)
{
CRegNode *pNode = (CRegNode *)GetTreeCtrl().GetItemData(pNMTreeView->itemNew.hItem);
if (pNode && !(pNode->m_dwType & REGNODE_TYPE_ROOT) && (pNode->m_dwType & REGNODE_TYPE_KEY))
{
LoadKey(pNode);
DisplayKey(pNode);
LoadValues(pNode);
}
}
*pResult = 0;
}
void CReditView::DisplayKey(CRegNode *pNode)
{
CTreeCtrl &treeCtl = GetTreeCtrl();
CRegNode *pTemp;
pTemp = pNode->m_pFirstChild;
while (pTemp)
{
if (!pTemp->m_hItem && !(pTemp->m_dwType & REGNODE_TYPE_VALUE))
{
pTemp->m_hItem = treeCtl.InsertItem(pTemp->m_strName, 31, 12, pNode ? pNode->m_hItem : TVI_ROOT, TVI_LAST);
treeCtl.SetItemData(pTemp->m_hItem, (DWORD)pTemp);
}
pTemp = pTemp->m_pNextSibling;
}
}
void CReditView::DisplayValue(CRegNode *pNode)
{
CDetailView *pView = GetListView();
pView->DisplayValues(pNode);
}
void CReditView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
if (pNMTreeView && pNMTreeView->itemNew.hItem)
{
CRegNode *pNode = (CRegNode *)GetTreeCtrl().GetItemData(pNMTreeView->itemNew.hItem);
if (pNode && !(pNode->m_dwType & REGNODE_TYPE_TOPMOST) && (pNode->m_dwType & REGNODE_TYPE_KEY))
{
LoadKey(pNode);
DisplayKey(pNode);
LoadValues(pNode);
DisplayValue(pNode);
DisplayKeyPath(pNMTreeView->itemNew.hItem);
}
}
*pResult = 0;
}
void CReditView::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
CTreeView::PostNcDestroy();
}
void CReditView::OnDestroy()
{
// TODO: Add your message handler code here
Clear();
CTreeView::OnDestroy();
}
void CReditView::DisplayKeyPath(HTREEITEM hItem)
{
CTreeCtrl &treeCtl = GetTreeCtrl();
CRegNode *pNode;
CString strTemp1;
while (hItem)
{
pNode = (CRegNode *)treeCtl.GetItemData(hItem);
if (pNode)
{
strTemp1 = pNode->m_strName + _T("\\") + strTemp1;
}
hItem = treeCtl.GetParentItem(hItem);
}
((CMainFrame *)AfxGetMainWnd())->SetMessageText(strTemp1);
}
void CReditView::Clear()
{
CTreeCtrl &treeCtl = GetTreeCtrl();
HTREEITEM hRootItem = treeCtl.GetRootItem();
if (hRootItem)
{
CRegNode *pNode = (CRegNode *)treeCtl.GetItemData(hRootItem);
if (pNode)
delete pNode;
}
if (m_ImageList.GetSafeHandle())
m_ImageList.DeleteImageList();
treeCtl.DeleteAllItems();
}
LONG CReditView::OnShowKeyPath(WPARAM wParam, LPARAM lParam)
{
CTreeCtrl &treeCtl = GetTreeCtrl();
CRegNode *pNode;
CString strTemp1;
HTREEITEM hItem = treeCtl.GetSelectedItem();
int nTimes = 1, len;
while (hItem)
{
pNode = (CRegNode *)treeCtl.GetItemData(hItem);
if (pNode)
{
strTemp1 = pNode->m_strName + _T("\\") + strTemp1;
len = strTemp1.GetLength();
while (len >= 20 * nTimes) // display 20 chars per line
{
strTemp1 = strTemp1.Mid(0, (len - 20 * nTimes) > 0 ? len - 20 *nTimes : 0) + _T('\n') + strTemp1.Right(20 * nTimes);
nTimes++;
}
}
hItem = treeCtl.GetParentItem(hItem);
}
if (strTemp1.GetLength())
{
AfxMessageBox(strTemp1);
}
return 0L;
}
void CReditView::OnRclick(NMHDR* pNM
WinCE下的注册表编辑程序.
4星 · 超过85%的资源 需积分: 9 78 浏览量
2009-04-26
13:10:31
上传
评论
收藏 75KB RAR 举报
qblll
- 粉丝: 0
- 资源: 12
最新资源
- Unity要点和难点教程案例和代码解析
- gazebo-plugin添加自定义话题数据发布
- STM32 ST-LINK 下载错误解决方法
- (机考卷,200分)- 最长子字符串的长度(二)(Java & JS & Python & C).html
- 运用tf实现自然场景文字检测,keras-pytorch实现ctpn+crnn+ctc实现不定长场景文字OCR识别.rar
- 《自动驾驶控制算法》基于matlab实现的模型.rar
- java-leetcode面试题解Stack之第1111题有效括号的嵌套深度-题解.zip
- 基于matlab实现的simulink双效串并联吸收式制冷动态仿真.rar
- java-leetcode面试题解Stack之第946题验证栈序列-题解.zip
- java-leetcode面试题解Stack之第735题小行星碰撞-题解.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈