⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lefttreeview.cpp

📁 主要基于数据库技术
💻 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 + -