📄 mytreectrl.cpp
字号:
// MyTreeCtrl.cpp : implementation file
//
#include "stdafx.h"
#include "BQQ.h"
#include "MyTreeCtrl.h"
#include "rename.h"
#include "myaddrdlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CMyTreeCtrl
CMyTreeCtrl::CMyTreeCtrl()
{
}
CMyTreeCtrl::~CMyTreeCtrl()
{
}
BEGIN_MESSAGE_MAP(CMyTreeCtrl, CTreeCtrl)
//{{AFX_MSG_MAP(CMyTreeCtrl)
ON_WM_RBUTTONDOWN()
ON_COMMAND(ID_GROUPADD, OnGroupadd)
ON_COMMAND(ID_GROUPDEL, OnGroupdel)
ON_NOTIFY_REFLECT(TVN_SELCHANGING, OnSelchanging)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
ON_WM_LBUTTONDBLCLK()
ON_COMMAND(ID_GROUPRN, OnGrouprn)
ON_WM_LBUTTONDOWN()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyTreeCtrl message handlers
BOOL CMyTreeCtrl::InitTree()
{
try
{
TVINSERTSTRUCT tvInsert;
tvInsert.hParent = NULL;
tvInsert.hInsertAfter = NULL;
tvInsert.item.mask = TVIF_TEXT;
tvInsert.item.pszText = _T("地址分组");
this->DeleteAllItems();
hCountry = this->InsertItem(&tvInsert);
LoadGroup();
if(this->GetCount()==1)
InsertItem(TVIF_TEXT,_T("个人组"),0, 0,0,0,0, hCountry, NULL);
this->Expand(hCountry,TVE_EXPAND);
this->SelectItem(this->GetChildItem(this->GetRootItem()));
}
catch(...)
{
MessageBox("初始化有错误发生!","提示",MB_ICONERROR|MB_OK);
}
return TRUE;
}
BOOL CMyTreeCtrl::AddAItem(CString nodeName)
{
if(hCountry ==NULL)
hCountry = this->GetRootItem();
InsertItem(TVIF_TEXT,_T(nodeName),0, 0,0,0,0, hCountry, NULL);
return TRUE;
}
void CMyTreeCtrl::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTreeCtrl::OnRButtonDown(nFlags, point);
CMenu* popMenu = new CMenu();
popMenu->LoadMenu(IDR_TREEPOP);
CMenu* file_menu = popMenu->GetSubMenu(0);
ClientToScreen(&point);
file_menu->TrackPopupMenu(TPM_RIGHTBUTTON|TPM_LEFTALIGN,point.x,point.y,this);
if(popMenu != NULL)
delete popMenu;
}
void CMyTreeCtrl::OnGroupadd()
{
// TODO: Add your command handler code here
CString newName="";
newName.Format("Group%d",this->GetCount());
AddAItem(newName);
}
void CMyTreeCtrl::OnGroupdel()
{
// TODO: Add your command handler code here
HTREEITEM selItem = this->GetSelectedItem();
if ((selItem != NULL)&& this->GetItemText(selItem) !="好友分组")
{
if(this->ItemHasChildren(selItem) )
{
this->Expand(selItem, TVE_EXPAND);
this->EnsureVisible(selItem);
}
else
{
this->DeleteItem(selItem);
((CMyAddrDlg*)GetParent())->m_MyListCtrl.DeleteAllItems();
WritePrivateProfileString(((CMyAddrDlg*)GetParent())->m_MyListCtrl.m_CurrentGroup, NULL , NULL, BQQ_INI );// delete all old group
((CMyAddrDlg*)GetParent())->m_MyListCtrl.m_CurrentGroup = "";
}
}
}
void CMyTreeCtrl::OnGrouprn()
{
// TODO: Add your command handler code here
CReName renameDlg(this->GetParent());
HTREEITEM selItem = this->GetSelectedItem();
if ((selItem != NULL)&& this->GetItemText(selItem) !="好友分组")
{
if(this->ItemHasChildren(selItem) )
{
this->Expand(selItem, TVE_EXPAND);
this->EnsureVisible(selItem);
}
else
{
renameDlg.m_NewName = this->GetItemText(selItem);
if(renameDlg.DoModal()==IDOK)
{
this->SetItemText(selItem,(LPCTSTR)renameDlg.m_NewName);
((CMyAddrDlg*)GetParent())->m_MyListCtrl.m_CurrentGroup = renameDlg.m_NewName;
}
}
}
}
void CMyTreeCtrl::OnSelchanging(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
((CMyAddrDlg*)GetParent())->m_MyListCtrl.SaveAll();
*pResult = 0;
}
void CMyTreeCtrl::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM selItem = this->GetSelectedItem();
if ((selItem != NULL)&& this->GetItemText(selItem) !="好友分组")
{
if(this->ItemHasChildren(selItem) )
{
this->Expand(selItem, TVE_EXPAND);
this->EnsureVisible(selItem);
}
else
{
((CMyAddrDlg*)GetParent())->m_MyListCtrl.m_CurrentGroup =this->GetItemText(selItem);
((CMyAddrDlg*)GetParent())->m_MyListCtrl.LoadLs();
}
}
*pResult = 0;
}
BOOL CMyTreeCtrl::LoadGroup()
{
#define MAX_TEMP_BUFFER_SIZE 2000
TCHAR stTemp[MAX_TEMP_BUFFER_SIZE+1];
CString groupNumber="";
for (int i = 0; i < MAX_GROUP ; i++)
{
groupNumber.Format("Group%d", i+1);
GetPrivateProfileString(_T("BQQGROUPS"), groupNumber,"", stTemp, MAX_TEMP_BUFFER_SIZE, BQQ_INI );
if ( strcmp( stTemp , "") != 0 )
{
AddAItem(stTemp);
}
}
return TRUE;
}
BOOL CMyTreeCtrl::SavGroup()
{
WritePrivateProfileString(_T("BQQGROUPS"), NULL , NULL, BQQ_INI );// delete all old group
if(hCountry ==NULL)
hCountry = this->GetFirstVisibleItem();
HTREEITEM hCurrent = this->GetChildItem(hCountry);
int i=1;
while (hCurrent != NULL)
{
CString gpName="我的好友",groupNumber="";
gpName = GetItemText(hCurrent);
if ( !gpName.IsEmpty() && gpName !="好友分组")
groupNumber.Format("Group%d", i++);
WritePrivateProfileString(_T("BQQGROUPS"), groupNumber , gpName, BQQ_INI );
hCurrent = GetNextItem(hCurrent, TVGN_NEXT);
}
return TRUE;
}
void CMyTreeCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTreeCtrl::OnLButtonDblClk(nFlags, point);
OnGrouprn();
}
void CMyTreeCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CTreeCtrl::OnLButtonDown(nFlags, point);
UINT uFlags=0;
HTREEITEM hti = HitTest(point,&uFlags);
if( (uFlags & TVHT_ONITEMSTATEICON) && hti == GetRootItem())
{
HTREEITEM hCurrent = GetChildItem(hti);
while (hCurrent != NULL)
{
SetCheck(hCurrent,GetCheck(hti));
hCurrent = GetNextItem(hCurrent, TVGN_NEXT);
}
}
if(GetSelectedItem() == GetRootItem())
{
((CMyAddrDlg*)GetParent())->m_MyListCtrl.m_CurrentGroup ="";
((CMyAddrDlg*)GetParent())->m_MyListCtrl.DeleteAllItems();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -