📄 regeditview.cpp
字号:
hChildItem=hNextItem;
}
}
return count;
}
void CRegEditView::GetItemPath(HKEY &hRoot, CString &SubKey, HTREEITEM hItem)
{
CTreeCtrl & m_Ctrl=GetTreeCtrl();
CString ItemText;
SubKey=m_Ctrl.GetItemText(hItem);
ItemText=SubKey;
HTREEITEM hParentTemp;
// MessageBox(SubKey);
while(1)
{
if(ItemText.Left(5)=="HKEY_")
break;
hParentTemp=m_Ctrl.GetParentItem(hItem);
ItemText=m_Ctrl.GetItemText(hParentTemp);
if(ItemText.Left(5)!="HKEY_")
SubKey=ItemText+"\\"+SubKey;
hItem=hParentTemp;
}
if(ItemText=="HKEY_CLASSES_ROOT")
hRoot=HKEY_CLASSES_ROOT;
if(ItemText== "HKEY_CURRENT_USER")
hRoot=HKEY_CURRENT_USER;
if(ItemText=="HKEY_LOCAL_MACHINE")
hRoot=HKEY_LOCAL_MACHINE;
if(ItemText=="HKEY_USERS")
hRoot=HKEY_USERS;
/* {
char buffer[256];
strcpy(buffer,(LPCTSTR)SubKey);
((MyListView*)((CMainFrame*)AfxGetMainWnd())->m_Splitter.GetPane (0,1))->AddItem (buffer);
}
*/
}
void CRegEditView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
CTreeCtrl& m_Ctrl=GetTreeCtrl();
HTREEITEM hRoot=m_Ctrl.GetRootItem();
HTREEITEM hTreeCurrent=m_Ctrl.GetSelectedItem();
if(hTreeCurrent==NULL) return;
m_hHitItem=hTreeCurrent;
HKEY h_RootKey;
if(hTreeCurrent==hRoot) return ;
GetItemPath(h_RootKey,strSubKey,hTreeCurrent);
if(m_Ctrl.GetParentItem(hTreeCurrent)==hRoot)
{
h_CurrentKey=h_RootKey;
((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_RootKey);
}else if(RegOpenKeyEx(h_RootKey,(LPCTSTR)strSubKey,NULL,KEY_ALL_ACCESS/*KEY_ENUMERATE_SUB_KEYS| KEY_QUERY_VALUE|KEY_SET_VALUE|KEY_CREATE_SUB_KEY|KEY_READ|KEY_WRITE*/,&h_CurrentKey)==ERROR_SUCCESS)
{
((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_CurrentKey);
// RegCloseKey(hKey);
}
*pResult = 0;
}
void CRegEditView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
CTreeCtrl& m_Ctrl=GetTreeCtrl();
//UINT uFlags;
CPoint pt;
GetCursorPos(&pt);
ScreenToClient(&pt);
////////////////////////////////
HTREEITEM hItemRoot = m_Ctrl.GetRootItem();
HTREEITEM hTreeItem= m_Ctrl.HitTest(pt, NULL);
/////////////////////////////////////////////////////////////////
//如果没点中任何结点则退出,如果点中的是根结点则返出
if(hTreeItem==NULL)
return;
if(hTreeItem==hItemRoot)
{
MessageBox(_T("NULL"),NULL,MB_OK);
return;
}
m_hHitItem=hTreeItem;
CString str=m_Ctrl.GetItemText (m_hHitItem);
CMenu menu_bar;// = AfxGetMainWnd()->GetMenu();
menu_bar.LoadMenu (IDR_MENU1);
CMenu* file_menu = menu_bar.GetSubMenu(0);
ASSERT(file_menu);
if(file_menu==NULL)
{
MessageBox(_T("Error"),NULL,MB_OK);
return;
}
UINT nStateMask;
nStateMask=m_Ctrl.GetItemState(m_hHitItem,TVIS_EXPANDED);
if((nStateMask&TVIS_EXPANDED)!=0)
// MessageBox("折叠",NULL,MB_OK);
file_menu->ModifyMenu(ID_EXPAND,MF_BYCOMMAND|MF_STRING,ID_EXPAND,_T("折叠"));
else
//MessageBox("展开",NULL,MB_OK);
file_menu->ModifyMenu(ID_EXPAND,MF_BYCOMMAND|MF_STRING,ID_EXPAND,_T("展开"));
BOOL flag=m_Ctrl.ItemHasChildren (m_hHitItem);
if(flag)
EnableMenuItem(file_menu->m_hMenu,0,MF_ENABLED |MF_BYPOSITION);
else
EnableMenuItem(file_menu->m_hMenu,0,MF_GRAYED|MF_BYPOSITION);
if(str.Left(5)==_T("HKEY_"))
{
EnableMenuItem(file_menu->m_hMenu,2,MF_GRAYED|MF_BYPOSITION);
EnableMenuItem(file_menu->m_hMenu,3,MF_GRAYED|MF_BYPOSITION);
}
else
{
EnableMenuItem(file_menu->m_hMenu,2,MF_ENABLED |MF_BYPOSITION);
EnableMenuItem(file_menu->m_hMenu,3,MF_ENABLED |MF_BYPOSITION);
}
file_menu->TrackPopupMenu(TPM_RIGHTALIGN, pt.x,pt.y, this);
*pResult = 0;
}
void CRegEditView::DeleteKey(HKEY hKey, CString SubKey)
{
DWORD dwLength,index;
TCHAR buffer[512];
HKEY hSubKey;
LONG iRet;
if(RegOpenKeyEx(hKey,(LPCTSTR)SubKey,NULL,KEY_ALL_ACCESS,&hSubKey)!=ERROR_SUCCESS)
return;
iRet=ERROR_SUCCESS;
index=0;
while(iRet!=ERROR_NO_MORE_ITEMS)
{
dwLength=sizeof(buffer)/sizeof(TCHAR);
iRet=RegEnumKeyEx(hSubKey,index++,buffer,&dwLength,NULL,NULL,NULL,NULL);
if(iRet==ERROR_SUCCESS)
DeleteKey(hSubKey,CString(buffer));
}
RegCloseKey(hSubKey);
RegDeleteKey(hKey,SubKey);
}
/*
void CRegEditView::OnDel()
{
}
*/
void CRegEditView::OnExpand()
{
// TODO: Add your command handler code here
CPoint pt;
CTreeCtrl& m_Ctrl=GetTreeCtrl();
/////////////////////////////////////////////////////////////
GetCursorPos(&pt);
ScreenToClient(&pt);
if(m_hHitItem==NULL)
return;
m_Ctrl.Expand (m_hHitItem,TVE_TOGGLE);
}
void CRegEditView::OnRefresh()
{
// TODO: Add your command handler code here
CTreeCtrl& m_Ctrl=GetTreeCtrl();
HTREEITEM hNextItem,hChildItem;
hChildItem=m_Ctrl.GetChildItem(m_hHitItem);
while(hChildItem!=NULL)
{
hNextItem=m_Ctrl.GetNextItem (hChildItem,TVGN_NEXT);
m_Ctrl.DeleteItem (hChildItem);
hChildItem=hNextItem;
}
FindRegSubKey(h_CurrentKey,m_hHitItem);
}
void CRegEditView::OnNewKey()
{
// TODO: Add your command handler code here
CTreeCtrl & m_Ctrl=GetTreeCtrl();
CDialogNewKey dlg;
dlg.DoModal ();
CString strKeyName;
strKeyName=dlg.m_KeyName ;
CString SubKey;
HKEY hKey,hOpenKey;
DWORD dwDescription;
GetItemPath(hKey,SubKey,m_hHitItem);
SubKey=SubKey+"\\"+strKeyName;
if(RegCreateKeyEx(hKey,(LPCTSTR)SubKey,NULL,NULL,REG_OPTION_NON_VOLATILE,
KEY_ALL_ACCESS,NULL,&hOpenKey,&dwDescription)==ERROR_SUCCESS)
{
if(dwDescription==REG_CREATED_NEW_KEY)
{
HTREEITEM hSelectedItem;
hSelectedItem=m_Ctrl.GetSelectedItem ();
if(hSelectedItem==NULL)
return;
CString str=m_Ctrl.GetItemText (hSelectedItem);
TV_INSERTSTRUCT hTreeItem;
hTreeItem.hParent=hSelectedItem;
hTreeItem.item.mask=TVIF_TEXT|TVIF_IMAGE|TVIF_SELECTEDIMAGE;
hTreeItem.hInsertAfter=TVI_SORT;
hTreeItem.item.iImage=ImageUnSelected;
hTreeItem.item.iSelectedImage=ImageSelected;
TCHAR buffer[512];
wcscpy(buffer,(LPCTSTR)strKeyName);
hTreeItem.item.pszText=buffer;
HTREEITEM hItem=m_Ctrl.InsertItem(&hTreeItem);
if(hItem==NULL)
MessageBox(_T("请刷新,以显示新建的键。"),_T("新建"),MB_OK);
m_Ctrl.Expand (hSelectedItem,TVE_EXPAND);
Invalidate(TRUE);
}
else
MessageBox(_T("该键已存在"),_T("新键"),MB_OK);
}
else
MessageBox(_T("新建键失败"),_T("新建"),MB_OK);
}
void CRegEditView::OnNewSz()
{
// TODO: Add your command handler code here
CNewSZValue dlg;
dlg.Disp (h_CurrentKey,_T("新建字符串"),_T("字符值"));
((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_CurrentKey);
}
void CRegEditView::OnNewDword()
{
// TODO: Add your command handler code here
CNewValueDWORD dlg;
dlg.Disp (h_CurrentKey,_T("新建DWORD值"),_T("0x0000000"));
((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->DispValue (h_CurrentKey);
}
void CRegEditView::OnDel()
{
// TODO: Add your command handler code here
CTreeCtrl & m_Ctrl=GetTreeCtrl();
CString SubKey;
HKEY hKey;
CString str;
str=m_Ctrl.GetItemText(m_hHitItem);
if(str.Left(5)==_T("HKEY_"))
{
MessageBox(_T("不能删除根键!"),NULL,MB_OK);
return;
}
GetItemPath(hKey,SubKey,m_hHitItem);
/*
CWnd* m_Wnd=((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetActivePane ();
if(m_Wnd=NULL)
{
MessageBox(_T("NULL"),NULL,MB_OK);
return;
}
if(m_Wnd->m_hWnd!=this->m_hWnd)
{
MessageBox(_T("is not eq"),NULL,MB_OK);
return;
} */
//删除当前键下所有的子键
//此处最好定义一个函数DI归调用删除所有子键
DeleteKey(hKey,SubKey);
m_Ctrl.DeleteItem(m_hHitItem);
}
void CRegEditView::OnDelValue()
{
// TODO: Add your command handler code here
((CMyListView*)((CMainFrame*)AfxGetMainWnd())->m_wndSplitter.GetPane (0,1))->OnDell();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -