📄 lefttreeview.cpp
字号:
// LeftTreeView.cpp : implementation file
//
#include "stdafx.h"
#include "YLmms.h"
#include "SongRecordSet.h"
#include "RightListView.h"
#include "LeftTreeView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView
IMPLEMENT_DYNCREATE(CLeftTreeView, CTreeView)
CLeftTreeView::CLeftTreeView()
{
}
CLeftTreeView::~CLeftTreeView()
{
}
BEGIN_MESSAGE_MAP(CLeftTreeView, CTreeView)
//{{AFX_MSG_MAP(CLeftTreeView)
ON_NOTIFY_REFLECT(TVN_SELCHANGED, OnSelchanged)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView drawing
void CLeftTreeView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView diagnostics
#ifdef _DEBUG
void CLeftTreeView::AssertValid() const
{
CTreeView::AssertValid();
}
void CLeftTreeView::Dump(CDumpContext& dc) const
{
CTreeView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CLeftTreeView message handlers
void CLeftTreeView::OnInitialUpdate()
{
CTreeView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CTreeView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
//设置树风格
::SetWindowLong(m_hWnd,GWL_STYLE,WS_VISIBLE|WS_TABSTOP
|WS_CHILD|WS_BORDER|TVS_HASBUTTONS
|TVS_LINESATROOT|TVS_HASLINES);
CTreeCtrl& treeCtrl=GetTreeCtrl();
//创建图像列表
m_ImageList.Create(IDB_BITMAP, 32, 1, RGB(255, 0, 255));
treeCtrl.SetImageList(&m_ImageList, LVSIL_NORMAL);
//treeCtrl.SetBkColor(RGB(232,232,232));
treeCtrl.SetBkColor(RGB(23,232,232));
//treeCtrl.SetBkColor(RGB(2,2,232));
//插入树项-歌手列表
treeCtrl.InsertItem("分类目录", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("古典", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("流行", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("欧美金曲", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("日韩", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("中国民乐", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("流金岁月", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("轻音乐", 0, 1,TVI_ROOT);
treeCtrl.InsertItem("少儿", 0, 1,TVI_ROOT);
// treeCtrl.InsertItem("歌手列表", 1, 4);
//将数据库中的记录插入
CSongRecordSet db;
//////////////////////////////////////
try
{
if(db.IsOpen())
db.Close();
//设置查询条件
CString strSQL="select * from music";
//执行查询
db.Open(CRecordset::snapshot,NULL,CRecordset::none);
while(!db.IsEOF())
{
// AddSingerToTree(db.m_Singer,db.m_Sex);
AddSingerToTree(db.m_Singer,db.m_Sex,db.m_Classify);
//m_Classify=db.m_Classify;
m_Classify=db.m_Classify;
m_Singer=db.m_Singer;
//记录游标移到下一条记录
db.MoveNext();
}
db.Close();
}
//意外捕获
catch(CDBException*e)
{
e->ReportError ();
return;
}
}
void CLeftTreeView::AddSingerToTree(CString &strSinger,CString &strMan,CString &strClassify)
{
bool temp=true;
//插入树项-根据是否为男歌手
CTreeCtrl& treeCtrl=GetTreeCtrl();
BOOL bMan;
bMan=strMan.Find("女")==-1?1:0;
//判断是否已经存在指定的歌手
// HTREEITEM hSingerItem =treeCtrl.GetRootItem();
HTREEITEM hClassifyItem=treeCtrl.GetRootItem();//获取父项
HTREEITEM hSingerItem;// =treeCtrl.GetNextItem(hClassifyItem,TVGN_CHILD);//子项
// HTREEITEM hSingerItem =treeCtrl.GetChildItem(hClassifyItem);//子项
//CString TEST=treeCtrl.GetItemText(treeCtrl.GetChildItem(hClassifyItem));
//GetChildItem();
if(hClassifyItem)
{
while(hClassifyItem)
{
CString strItemText =treeCtrl.GetItemText(hClassifyItem);
//若存在,则直接返回
if(strItemText==m_Classify)
{
hSingerItem=treeCtrl.GetNextItem(hClassifyItem,TVGN_CHILD);
//************************************************** //判断歌手是否存在
if (hSingerItem)
{
while (hSingerItem)
{CString strItemsinger=treeCtrl.GetItemText(hSingerItem);
// strItemsinger=m_Singer;
if (strItemsinger==m_Singer)
{
return;
}
//否则继续往下找
hSingerItem=treeCtrl.GetNextSiblingItem(hSingerItem);
}
}
//************************************************************
HTREEITEM user1,user2;
user1=hClassifyItem;
if(bMan)
{
// user2=treeCtrl.InsertItem(strSinger, 4, 5,TVI_ROOT);
treeCtrl.InsertItem(strSinger, 4, 5,user1);
// user1=treeCtrl.InsertItem("古典", 4, 5,user2);
// treeCtrl.InsertItem("你好", 4, 5,user1);
}
else
{
treeCtrl.InsertItem(strSinger, 2, 3,user1);
}
// hSingerItem =treeCtrl.GetChildItem(hClassifyItem);
//********************************************************
}
//否则继续往下找
//hSingerItem=treeCtrl.GetNextSiblingItem(hSingerItem);
hClassifyItem=treeCtrl.GetNextSiblingItem(hClassifyItem);
}
}
/*
if(hSingerItem)
{
while(hSingerItem)
{
CString strItemText =treeCtrl.GetItemText(hSingerItem);
//若存在,则直接返回
/ *
if(strItemText==m_Singer)
{
return;
}* /
if(strItemText==m_Classify)
{
return;
}
//否则继续往下找
hSingerItem=treeCtrl.GetNextSiblingItem(hSingerItem);
}
}
*/
//依据歌手性别不同设置不同的树项图标
/*
HTREEITEM user1,user2;
if(bMan)
{
user2=treeCtrl.InsertItem(strSinger, 4, 5,TVI_ROOT);
//treeCtrl.InsertItem(strSinger, 4, 5);
user1=treeCtrl.InsertItem("古典", 4, 5,user2);
treeCtrl.InsertItem("你好", 4, 5,user1);
}
else
{
treeCtrl.InsertItem(strSinger, 2, 3);
} */
}
void CLeftTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here
HTREEITEM hSelItem;
CString strSelItem;
CTreeCtrl& treeCtrl=GetTreeCtrl();
//获取选中的树项
hSelItem=pNMTreeView->itemNew.hItem;
strSelItem=treeCtrl.GetItemText(hSelItem);
CSplitterWnd* pSplitWnd=(CSplitterWnd*)GetParent();
CRightListView* pListView=(CRightListView*)pSplitWnd->GetPane(0,1);
//将该歌手的歌曲全部显示在列表中
CSongRecordSet db;
CString strSql;//用于在数据库中进行查找的中间变量
strSql.Format("Singer='%s'",strSelItem);
// strSql.Format("演唱='%s'",strSelItem);
pListView->AddToList(db,strSql);//将树视图里的内容通过数据库传给列表
*pResult = 0;
}
void CLeftTreeView::DelSinger()
{
CTreeCtrl& treeCtrl=GetTreeCtrl();
HTREEITEM hSelCur=treeCtrl.GetSelectedItem();
if(hSelCur==NULL)
{
AfxMessageBox("请先选择要删除的歌手:)");
return;
}
CString strCurSel;
strCurSel=treeCtrl.GetItemText(hSelCur);
//歌手列表树项不可以删除
if(strCurSel.Find("分类目录")!=-1||strCurSel.Find("古典")!=-1
||strCurSel.Find("流行")!=-1||strCurSel.Find("欧美金曲")!=-1
||strCurSel.Find("日韩")!=-1||strCurSel.Find("中国民乐")!=-1
||strCurSel.Find("流金岁月")!=-1||strCurSel.Find("轻音乐")!=-1||strCurSel.Find("少儿")!=-1)
{
AfxMessageBox("您要选择的不是歌手:)");
return;
}
//将数据库中记录删除
CSongRecordSet db;
try
{
if(db.IsOpen())
db.Close();
//设置查询条件
db.m_strFilter.Format("Singer='%s'",strCurSel);
//执行查询
db.Open(CRecordset::snapshot,NULL,CRecordset::none);
int mCur=0;
while(!db.IsEOF())
{
//删除歌曲信息
db.Delete();
//记录游标移到下一条记录
db.MoveNext();
}
db.Close();
}
//意外捕获
catch(CDBException*e)
{
e->ReportError ();
return;
}
//在treeCtrl中删除当前选中的歌手信息
treeCtrl.DeleteItem(hSelCur);
//提示用户,修改成功
AfxMessageBox("删除歌手成功!:)");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -