📄 leftpaneview.cpp
字号:
// LeftPaneView.cpp : implementation file
//
#include "stdafx.h"
#include "duoshi2.h"
#include "LeftPaneView.h"
#include "MainFrm.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView
IMPLEMENT_DYNCREATE(CLeftPaneView, CTreeView)
CLeftPaneView::CLeftPaneView()
{
}
CLeftPaneView::~CLeftPaneView()
{
}
BEGIN_MESSAGE_MAP(CLeftPaneView, CTreeView)
//{{AFX_MSG_MAP(CLeftPaneView)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
ON_NOTIFY_REFLECT(NM_RCLICK, OnRclick)
ON_COMMAND(IDM_DELETE, OnDelete)
ON_COMMAND(IDM_EDIT, OnEdit)
ON_COMMAND(IDM_INSERT_AFTER, OnInsertAfter)
ON_COMMAND(IDM_INSERT_BEFORE, OnInsertBefore)
ON_COMMAND(IDM_INSERT_FATHER, OnInsertFather)
ON_COMMAND(IDM_INSERT_SUN, OnInsertSun)
ON_NOTIFY_REFLECT(TVN_ENDLABELEDIT, OnEndlabeledit)
ON_COMMAND(ID_tree_test, Ontreetest)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView drawing
void CLeftPaneView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView diagnostics
#ifdef _DEBUG
void CLeftPaneView::AssertValid() const
{
CTreeView::AssertValid();
}
void CLeftPaneView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLeftPaneView message handlers
BOOL CLeftPaneView::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext)
{
// TODO: Add your specialized code here and/or call the base class
return CWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, pParentWnd, nID, pContext);
}
void CLeftPaneView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
//设置树风格
::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE|WS_TABSTOP
|WS_CHILD|WS_BORDER|TVS_HASBUTTONS
|TVS_LINESATROOT|TVS_HASLINES|TVS_EDITLABELS);
CTreeCtrl& treeCtrl=GetTreeCtrl();
//创建图像列表
//m_ImageList.Create(IDB_IMAGES, 16, 1, RGB(255, 0, 255));
// treeCtrl.SetImageList(&m_ImageList, LVSIL_NORMAL);
m_ImageList.Create(16, 16, ILC_COLOR32 ,10, RGB(0,0,0));
m_ImageList.SetBkColor(RGB(198,247,181)); //设置背景色
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON6));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON7));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON8));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON9));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON10));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON11));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON12));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON13));
m_ImageList.Add(AfxGetApp()->LoadIcon(IDI_ICON14));
treeCtrl.SetImageList(&m_ImageList,TVSIL_NORMAL);
treeCtrl.SetBkColor(RGB(201,230,245));
treeCtrl.SetTextColor(RGB(255,0,0));
//插入树项
treeCtrl.InsertItem("Function tree", 0, 0);
}
void CLeftPaneView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CLeftPaneView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
CMenu mainMenu;
mainMenu.LoadMenu(IDM_POPMENU);
CMenu* pPopMenu=mainMenu.GetSubMenu(0);
CPoint point;
UINT pflag;
GetCursorPos(&point);
ScreenToClient(&point);
CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hItem=treeCtrl.HitTest(point,&pflag);
if(hItem==NULL)
return;
treeCtrl.SelectItem(hItem);
/* CString str;
str.Format("%d,%d",point.x,point.y);
MessageBox(str);*/
ClientToScreen(&point);
pPopMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON , point.x,point.y,FromHandle(this->m_hWnd),NULL);
*pResult = 0;
}
void CLeftPaneView::OnDelete()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
treeCtrl.DeleteItem(treeCtrl.GetSelectedItem());
}
void CLeftPaneView::OnEdit()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
treeCtrl.EditLabel(treeCtrl.GetSelectedItem());
}
int CLeftPaneView::GetLevel(const HTREEITEM htim) //得到第几级节点
{ CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM tempHitm=htim;
int level=1;
while(tempHitm=treeCtrl.GetParentItem(tempHitm))
level++;
level%=7;
return level;
}
void CLeftPaneView::OnInsertAfter()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hitm=treeCtrl.GetSelectedItem();
if(NULL==hitm)
return;
int level=GetLevel(hitm);
treeCtrl.EditLabel(treeCtrl.InsertItem("function",2*level-2,2*level-1,treeCtrl.GetParentItem(hitm),hitm));
}
void CLeftPaneView::OnInsertBefore()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hitm=treeCtrl.GetSelectedItem();
if(NULL==hitm)
return;
int level=GetLevel(hitm);
treeCtrl.EditLabel(treeCtrl.InsertItem("function",2*level-2,2*level-1,treeCtrl.GetParentItem(hitm),treeCtrl.GetPrevSiblingItem(hitm)==NULL?TVI_FIRST:treeCtrl.GetPrevSiblingItem(hitm)));
}
void CLeftPaneView::OnInsertFather()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
treeCtrl.EditLabel(treeCtrl.InsertItem("function",0,1,TVI_ROOT,TVI_LAST));
}
void CLeftPaneView::OnInsertSun()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hitm=treeCtrl.GetSelectedItem();
if(NULL==hitm)
return;
int level=GetLevel(hitm);
level++;
HTREEITEM tempHitm=treeCtrl.InsertItem("function",2*level-2,2*level-1,hitm,TVI_LAST);
treeCtrl.Expand(hitm,TVE_EXPAND);
treeCtrl.EditLabel(tempHitm);
}
void CLeftPaneView::OnEndlabeledit(NMHDR* pNMHDR, LRESULT* pResult)
{
TV_DISPINFO* pTVDispInfo = (TV_DISPINFO*)pNMHDR;
// TODO: Add your control notification handler code here
/* CString str,temstr;
GetEditControl()->GetWindowText(str);
str.Replace(_T(" ")," "); //把中文空格换成两个英文空格
temstr=str;
str.TrimLeft();
str.TrimRight();
if(strlen(str)<1 || temstr!=str) //第二个条件保证不以空格开头或结尾
*pResult=false; //set it false not to save the changes
else
*pResult = true; //set it true to save the changes
*///注释部分的方法只检测不修改
//检测并自动去掉首尾空格
CString str(pTVDispInfo->item.pszText);
str.Replace(_T(" ")," ");
str.TrimLeft();
str.TrimRight();
if(strlen(str)<1)
*pResult=false;
else
{
sprintf(pTVDispInfo->item.pszText,"%s",str.GetBuffer(str.GetLength()));
*pResult=true;
}
}
void CLeftPaneView::Ontreetest()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hitm=treeCtrl.GetFirstVisibleItem();
fatherD=treeCtrl.GetItemText(hitm);
num_child=0;
HTREEITEM hitm1=treeCtrl.GetChildItem(hitm);
if(treeCtrl.GetItemText(hitm1)!="")
{
num_child=1;
sunD[0]=treeCtrl.GetItemText(hitm1);
HTREEITEM hitm3=treeCtrl.GetChildItem(hitm1);
grandD[0][0]=treeCtrl.GetItemText(hitm3);
int i=1;
HTREEITEM hitm4=treeCtrl.GetNextSiblingItem(hitm3);
while(treeCtrl.GetItemText(hitm4)!="")
{
grandD[0][i]=treeCtrl.GetItemText(hitm4);
i++;
hitm4=treeCtrl.GetNextSiblingItem(hitm4);
}
num_grand[0]=i;
HTREEITEM hitm2=treeCtrl.GetNextSiblingItem(hitm1);
while(treeCtrl.GetItemText(hitm2)!="")
{
sunD[num_child]=treeCtrl.GetItemText(hitm2);
HTREEITEM hitm5=treeCtrl.GetChildItem(hitm2);
grandD[num_child][0]=treeCtrl.GetItemText(hitm5);
HTREEITEM hitm6=treeCtrl.GetNextSiblingItem(hitm5);
int j=1;
while(treeCtrl.GetItemText(hitm6)!="")
{
grandD[num_child][j]=treeCtrl.GetItemText(hitm6);
j++;
hitm6=treeCtrl.GetNextSiblingItem(hitm6);
}
num_grand[num_child]=j;
num_child++;
hitm2=treeCtrl.GetNextSiblingItem(hitm2);
}
}
else{}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -