📄 lefttreeview.cpp
字号:
// LeftTreeView.cpp : implementation file
//
#include "stdafx.h"
#include "Chapter20.h"
#include "LeftTreeView.h"
#include "SongRecordSet.h"
#include "RightListView.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
//设置树风格
::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.InsertItem("歌手列表", 0, 1);
//将数据库中记录插入
CSongRecordSet db;
//////////////////////////////////////
try
{
if(db.IsOpen())
db.Close();
//设置查询条件
CString strSQL="select * from songMp3";
//执行查询
db.Open(CRecordset::snapshot,NULL,CRecordset::none);
while(!db.IsEOF())
{
AddSingerToTree(db.m_Singer,db.m_SingerSex);
m_strSinger=db.m_Singer;
//记录游标移到下一条记录
db.MoveNext();
}
db.Close();
}
//意外捕获
catch(CDBException*e)
{
e->ReportError ();
return;
}
}
void CLeftTreeView::AddSingerToTree(CString &strSinger,CString &strMan)
{
//插入树项-根据是否为男歌手
CTreeCtrl& treeCtrl=GetTreeCtrl();
BOOL bMan;
bMan=strMan.Find("女")==-1?1:0;
//判断是否已经存在指定的歌手
HTREEITEM hSingerItem =treeCtrl.GetRootItem();
if(hSingerItem)
{
while(hSingerItem)
{
CString strItemText =treeCtrl.GetItemText(hSingerItem);
//若存在,则直接返回
if(strItemText==m_strSinger)
{
return;
}
//否则继续往下找
hSingerItem=treeCtrl.GetNextSiblingItem(hSingerItem);
}
}
//依据歌手性别不同设置不同的树项图标
if(bMan)
{
treeCtrl.InsertItem(strSinger, 4, 5);
}
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("演唱='%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)
{
AfxMessageBox("您要选择的不是歌手:)");
return;
}
//将数据库中记录删除
CSongRecordSet db;
try
{
if(db.IsOpen())
db.Close();
//设置查询条件
db.m_strFilter.Format("演唱='%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 + -