?? reditview.cpp
字號:
ScreenToClient(&point);
CTreeCtrl &treeCtl = GetTreeCtrl();
HTREEITEM hItem = treeCtl.HitTest(point, &nFlags);
if ((nFlags & TVHT_ONITEM) && hItem)
{
CRegNode *pNode = (CRegNode *)GetTreeCtrl().GetItemData(hItem);
if (pNode && !(pNode->m_dwType & REGNODE_TYPE_TOPMOST))
{
BOOL bRet = m_TreeTraySubMenu.TrackPopupMenu(TPM_LEFTALIGN, pointSc.x, pointSc.y, this, NULL);
}
}
*pResult = 0;
}
void CReditView::OnCreateNewKey()
{
CDlgCreateKey dlg;
CRegNode *pnodeItem, *pnodeItemParent;
CTreeCtrl &treeCtl = GetTreeCtrl();
HTREEITEM hItem = treeCtl.GetSelectedItem();
DWORD dwDisposition;
HKEY hNewKey, hKeyParent;
LONG lErr;
if (hItem)
{
pnodeItemParent = (CRegNode *)treeCtl.GetItemData(hItem);
if (dlg.DoModal() == IDOK)
{
hKeyParent = pnodeItemParent->GetKeyHandle();
lErr = RegCreateKeyEx(hKeyParent, dlg.m_strKeyName, 0, _T(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hNewKey, &dwDisposition);
if (lErr == ERROR_SUCCESS)
{
pnodeItem = new CRegNode(dlg.m_strKeyName, REGNODE_TYPE_KEY);
::AddNode(pnodeItem, pnodeItemParent);
pnodeItem->m_hItem = treeCtl.InsertItem(pnodeItem->m_strName, 31, 12, hItem);
treeCtl.SetItemData(pnodeItem->m_hItem, (DWORD)pnodeItem);
RegCloseKey(hNewKey);
pnodeItem->m_bLoaded = TRUE;
}
RegCloseKey(hKeyParent);
}
}
}
void CReditView::OnNewStringValue()
{
CTreeCtrl &treeCtl = GetTreeCtrl();
HTREEITEM hItem = treeCtl.GetSelectedItem();
CRegNode *pNode;
if (hItem)
{
pNode = (CRegNode *)treeCtl.GetItemData(hItem);
if (pNode)
{
DisplayValue(pNode); // just to initialize the current node;
CDetailView *pView = GetListView();
pView->SendMessage(WM_COMMAND, ID_TEST_NEW_STRINGVALUE, 0);
}
}
}
void CReditView::OnNewDwordValue()
{
CTreeCtrl &treeCtl = GetTreeCtrl();
HTREEITEM hItem = treeCtl.GetSelectedItem();
CRegNode *pNode;
if (hItem)
{
pNode = (CRegNode *)treeCtl.GetItemData(hItem);
if (pNode)
{
DisplayValue(pNode); // just to initialize the current node;
CDetailView *pView = GetListView();
pView->SendMessage(WM_COMMAND, ID_TEST_NEW_DWORDVALUE, 0);
}
}
}
void CReditView::OnKeyDelete()
{
CTreeCtrl &treeCtl = GetTreeCtrl();
HTREEITEM hItem = treeCtl.GetSelectedItem();
CRegNode *pNode;
CString strTemp;
if (hItem)
{
pNode = (CRegNode *)treeCtl.GetItemData(hItem);
// only allow delete nodes of one level down from Standard HKLM HKCU keys
if (pNode)
{
strTemp.Format(_T("Do you really want to delete this key (%s), its subkeys and values?"), (LPCTSTR)pNode->m_strName);
if (pNode->m_pParent && pNode->m_pParent->m_pParent && (AfxMessageBox(strTemp, MB_YESNO) == IDYES))
{
treeCtl.DeleteItem(pNode->m_hItem);
// delete all subkeys
CRegNode *pTemp = pNode->m_pFirstChild, *pTemp2;
while (pTemp)
{
pTemp2 = pTemp;
pTemp = pTemp->m_pNextSibling;
delete pTemp2;
}
pNode->m_pFirstChild = NULL;
pNode->m_bLoaded = FALSE;
// load this key recursively (only keys and subkeys)
LoadKeysRecursive(pNode);
if (DeleteKeyRecursive(pNode))
{
DeleteNode(pNode);
}
}
}
}
}
void CReditView::OnKeyRename()
{
CTreeCtrl &treeCtl = GetTreeCtrl();
CRegNode *pNode;
CString strTemp1;
CDlgRenameKey dlg;
HTREEITEM hItem, hItem2, hItem3;
hItem = treeCtl.GetSelectedItem();
if (hItem)
pNode = (CRegNode *)treeCtl.GetItemData(hItem);
if (!pNode)
return;
// load all values subkeys and values
// delete key, values, subkeys and values
// create new key, values, subkeys and values
// delete all subkeys
dlg.m_strOldKeyName = pNode->m_strName;
if (dlg.DoModal() == IDOK && dlg.m_strNewKeyName.GetLength())
{
// delete all subkeys and values
// reset to not loaded
CRegNode *pTemp = pNode->m_pFirstChild, *pTemp2;
while (pTemp)
{
pTemp2 = pTemp;
pTemp = pTemp->m_pNextSibling;
delete pTemp2;
}
pNode->m_pFirstChild = NULL;
pNode->m_bLoaded = FALSE;
pNode->m_bValuesLoaded = FALSE;
// load this key recursively keys and subkeys and values
LoadKeysRecursive(pNode, TRUE);
// delete this key from registry only
if (DeleteKeyRecursive(pNode))
{
// change the key name
pNode->m_strName = dlg.m_strNewKeyName;
// create the key, subkeys and values in registry
CreateKeyRecursive(pNode, TRUE);
// change item text and delete all sub tree items
treeCtl.SetItemText(pNode->m_hItem, (LPCTSTR)pNode->m_strName);
hItem2 = treeCtl.GetNextItem(pNode->m_hItem, TVGN_CHILD);
while (hItem2)
{
hItem3 = treeCtl.GetNextItem(hItem2, TVGN_NEXT);
treeCtl.DeleteItem(hItem2);
hItem2 = hItem3;
}
}
}
}
LONG CReditView::OnCopyKeyPath(WPARAM wParam, LPARAM lParam)
{
CTreeCtrl &treeCtl = GetTreeCtrl();
CRegNode *pNode;
CString strTemp1;
HTREEITEM hItem = treeCtl.GetSelectedItem();
while (hItem)
{
pNode = (CRegNode *)treeCtl.GetItemData(hItem);
if (pNode)
{
strTemp1 = pNode->m_strName + _T("\\") + strTemp1;
}
hItem = treeCtl.GetParentItem(hItem);
}
if (strTemp1.GetLength())
{
if (!OpenClipboard())
{
AfxMessageBox(_T("Cannot copy to the Clipboard"));
return 0;
}
// Remove the current Clipboard contents
if(!EmptyClipboard())
{
AfxMessageBox(_T("Cannot copy to Clipboard"));
return 0;
}
// Get the currently selected data
// For the appropriate data formats...
HGLOBAL hData = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE, (strTemp1.GetLength() + 1)* sizeof(TCHAR));
LPVOID lpData = GlobalLock(hData);
memcpy(lpData, (LPCTSTR)strTemp1, (strTemp1.GetLength() + 1)* sizeof(TCHAR));
GlobalUnlock(hData);
#ifdef UNICODE
if (::SetClipboardData(CF_UNICODETEXT, hData) == NULL)
#else
if (::SetClipboardData(CF_TEXT, hData) == NULL)
#endif
{
AfxMessageBox(_T("Cannot copy to Clipboard"));
CloseClipboard();
return 0;
}
CloseClipboard();
}
return 1L;
}
void CReditView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTreeCtrl &treeCtl = GetTreeCtrl();
#if defined(_WIN32_WCE)
#if !defined(_X86_) && !defined(WIN32_PLATFORM_HPC2000)
UINT nHitFlags;
HTREEITEM hItem = treeCtl.HitTest(point, &nHitFlags);
if ((nHitFlags & TVHT_ONITEM) && hItem)
{
CRegNode *pNode = (CRegNode *)GetTreeCtrl().GetItemData(hItem);
if (pNode && !(pNode->m_dwType & REGNODE_TYPE_TOPMOST))
{
m_PtGesture = point;
ClientToScreen(&m_PtGesture);
SHRecognizeGesture(point, TRUE);
}
}
#endif
#endif
CTreeView::OnLButtonDown(nFlags, point);
}
#if defined(_WIN32_WCE)
#if !defined(_X86_) && !defined(WIN32_PLATFORM_HPC2000)
void CReditView::OnContextMenu(WPARAM wParam, LPARAM lParam)
{
NMRGINFO *pInfo = (NMRGINFO *)lParam;
BOOL bRet = m_TreeTraySubMenu.TrackPopupMenu(TPM_LEFTALIGN, m_PtGesture.x, m_PtGesture.y, this, NULL);
}
#endif
#endif
void CReditView::OnViewRefresh()
{
CTreeCtrl &treeCtl = GetTreeCtrl();
HTREEITEM hItem = treeCtl.GetRootItem();
CRegNode *pRootNode, *pTemp, *pTemp2, *pTemp3;
if (hItem)
{
pRootNode = (CRegNode *)treeCtl.GetItemData(hItem);
if (pRootNode)
{
// delete everything under system reg keys
// first delete tree nodes, then the node ptrs, because while deleting
// selection change message happens
pTemp = pRootNode->m_pFirstChild;
while (pTemp)
{
pTemp2 = pTemp->m_pFirstChild;
while (pTemp2)
{
pTemp3 = pTemp2;
pTemp2 = pTemp2->m_pNextSibling;
if (pTemp3->m_hItem)
treeCtl.DeleteItem(pTemp3->m_hItem);
}
pTemp = pTemp->m_pNextSibling;
}
pTemp = pRootNode->m_pFirstChild;
while (pTemp)
{
pTemp2 = pTemp->m_pFirstChild;
while (pTemp2)
{
pTemp3 = pTemp2;
pTemp2 = pTemp2->m_pNextSibling;
delete pTemp3;
}
// reset
pTemp->m_pFirstChild = NULL;
pTemp->m_bLoaded = FALSE;
pTemp = pTemp->m_pNextSibling;
}
//
DisplayKey(pRootNode);
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -