📄 rightlistview.cpp
字号:
// RightListView.cpp : implementation file
//
#include "stdafx.h"
#include "Chapter20.h"
#include "RightListView.h"
#include "MainFrm.h"
#include "vfw.h"
#include "EditSong.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRightListView
IMPLEMENT_DYNCREATE(CRightListView, CListView)
CRightListView::CRightListView()
{
}
CRightListView::~CRightListView()
{
}
BEGIN_MESSAGE_MAP(CRightListView, CListView)
//{{AFX_MSG_MAP(CRightListView)
ON_WM_LBUTTONDBLCLK()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRightListView drawing
void CRightListView::OnDraw(CDC* pDC)
{
CDocument* pDoc = GetDocument();
// TODO: add draw code here
}
/////////////////////////////////////////////////////////////////////////////
// CRightListView diagnostics
#ifdef _DEBUG
void CRightListView::AssertValid() const
{
CListView::AssertValid();
}
void CRightListView::Dump(CDumpContext& dc) const
{
CListView::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CRightListView message handlers
void CRightListView::OnInitialUpdate()
{
CListView::OnInitialUpdate();
// TODO: Add your specialized code here and/or call the base class
CListCtrl& ctl=GetListCtrl();
// TODO: Add your specialized code here and/or call the base class
//设置列表控件风格
DWORD dwStyle=::GetWindowLong(m_hWnd,GWL_STYLE);
dwStyle|=LVS_REPORT|LVS_SHOWSELALWAYS|LVS_EDITLABELS;
::SetWindowLong(m_hWnd,GWL_STYLE,dwStyle);
dwStyle=ctl.GetExtendedStyle();
dwStyle|=LVS_EX_GRIDLINES|LVS_EX_FULLROWSELECT;
//设置扩展风格
ctl.SetExtendedStyle(dwStyle);
// ctl.SetBkColor(RGB(232,232,232));
//列表控件头内容
TCHAR tittle[10][10] = {_T("文件名"),_T("演唱"),_T("专辑"),_T("标题"),
_T("备注"),_T("艺术家"),_T("年代"),_T("流派"),_T("文件夹"),_T("性别")};
LV_COLUMN lvcolumn;
CRect rect;
GetWindowRect(&rect);
//填充列表控件头
for(int i=0;i<10;i++)
{
lvcolumn.mask =LVCF_FMT|LVCF_SUBITEM|LVCF_TEXT
|LVCF_WIDTH|LVCF_ORDER;
lvcolumn.fmt = LVCFMT_LEFT;
lvcolumn.pszText = tittle[i];
lvcolumn.iSubItem = i;
lvcolumn.iOrder = i;
lvcolumn.cx = rect.Height()/4;
GetListCtrl().InsertColumn(i, &lvcolumn);
}
}
void CRightListView::AddToList(CSongRecordSet &db,CString& strSql)
{
CListCtrl& listCtrl=GetListCtrl();
listCtrl.DeleteAllItems();
//将数据库中记录插入
try
{
if(db.IsOpen())
db.Close();
//设置查询条件
db.m_strFilter=strSql;
//执行查询
db.Open(CRecordset::snapshot,NULL,CRecordset::none);
int mCur=0;
while(!db.IsEOF())
{
//添加条目
AddItem(db,mCur,0);
mCur++;
//记录游标移到下一条记录
db.MoveNext();
}
db.Close();
}
//意外捕获
catch(CDBException*e)
{
e->ReportError ();
return;
}
}
void CRightListView::AddItem(CSongRecordSet& db,int iItem,UINT uMethod)
{
CListCtrl& listCtrl=GetListCtrl();
//以下是插入列表控件条目的几种方法,可以试着不同的方法调用
switch(uMethod)
{
case 0:
{
//循环插入
CString strFieldValue;
listCtrl.InsertItem(iItem,strFieldValue);
listCtrl.SetItemText(iItem,0,db.m_strFileName);
listCtrl.SetItemText(iItem,1,db.m_Singer);
listCtrl.SetItemText(iItem,2,db.m_Album);
listCtrl.SetItemText(iItem,3,db.m_Title);
listCtrl.SetItemText(iItem,4,db.m_Comment);
listCtrl.SetItemText(iItem,5,db.m_Artist);
listCtrl.SetItemText(iItem,6,db.m_Year);
listCtrl.SetItemText(iItem,7,db.m_Genre);
listCtrl.SetItemText(iItem,8,db.m_Folder);
listCtrl.SetItemText(iItem,9,db.m_SingerSex);
return;
}
case 1:
{
UINT uField;
uField=listCtrl.GetHeaderCtrl()->GetItemCount();
//循环插入
CString strFieldValue;
//负责插入条目(行)
listCtrl.InsertItem (iItem,strFieldValue);
//0-8
for(UINT nColumn=1;nColumn<uField; nColumn++)
{
//获取字段值
db.GetFieldValue(nColumn,strFieldValue);
listCtrl.SetItemText(iItem, nColumn, strFieldValue);
}
return;
}
case 2:
{
//循环插入
CString strFieldValue;
//负责插入条目(行)
listCtrl.InsertItem (iItem,strFieldValue);
for(UINT nColumn=0;nColumn<db.m_nFields; nColumn++)
{
//获取字段值
db.GetFieldValue(nColumn,strFieldValue);
listCtrl.SetItemText (iItem, nColumn, strFieldValue);
}
return;
}
default:
return;
}
}
void CRightListView::EditSong()
{
CListCtrl& listCtrl=GetListCtrl();
POSITION pos=listCtrl.GetFirstSelectedItemPosition();
if (pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请选中要编辑的歌曲!:)");
return;
}
//获取当前记录的位置游标
int iSelCur=listCtrl.GetNextSelectedItem(pos);
CString strNameText,strDirText;
//寻找要删除的歌曲信息
strNameText=listCtrl.GetItemText(iSelCur,0);
strDirText=listCtrl.GetItemText(iSelCur,8);
//编辑对话框对象
CEditSong dlg;
dlg.m_strEditAlbum=listCtrl.GetItemText(iSelCur,2);
dlg.m_strEditTittle=listCtrl.GetItemText(iSelCur,3);
dlg.m_strEditComment=listCtrl.GetItemText(iSelCur,4);
if(dlg.DoModal()!=IDOK)
{
//如果用户选择取消按钮,则退出
return;
}
//将数据库中记录插入
CSongRecordSet db;
try
{
if(db.IsOpen())
db.Close();
//设置查询条件
db.m_strFilter.Format("文件名='%s' and 文件夹='%s'",
strNameText,strDirText);
//执行查询
db.Open(CRecordset::snapshot,NULL,CRecordset::none);
if(!db.IsEOF())
{
//删除歌曲信息
db.Edit();
db.m_Album=dlg.m_strEditAlbum;
db.m_Title=dlg.m_strEditTittle;
db.m_Comment=dlg.m_strEditComment;
}
if(db.CanUpdate())
{
db.Update();
}
db.Close();
}
//意外捕获
catch(CDBException*e)
{
e->ReportError ();
return;
}
//在ListCtrl中刷新信息
listCtrl.SetItemText(0,2,db.m_Album);
listCtrl.SetItemText(0,3,db.m_Title);
listCtrl.SetItemText(0,4,db.m_Comment);
//提示用户,编辑成功
AfxMessageBox("编辑成功!:)");
}
void CRightListView::DeleteSong()
{
CListCtrl& listCtrl=GetListCtrl();
POSITION pos=listCtrl.GetFirstSelectedItemPosition();
if (pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请选中要删除的歌曲!:)");
return;
}
else
{
//获取当前记录的位置游标
int iSelCur=listCtrl.GetNextSelectedItem(pos);
CString strNameText,strDirText;
//寻找要删除的歌曲信息
strNameText=listCtrl.GetItemText(iSelCur,0);
strDirText=listCtrl.GetItemText(iSelCur,8);
//将数据库中记录删除
CSongRecordSet db;
try
{
if(db.IsOpen())
db.Close();
//设置查询条件
db.m_strFilter.Format("文件名='%s' and 文件夹='%s'",strNameText,strDirText);
//执行查询
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;
}
//在ListCtrl中删除当前选中的歌曲信息
listCtrl.DeleteItem(iSelCur);
//提示用户,删除成功
AfxMessageBox("删除成功!:)");
}
}
void CRightListView::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CListCtrl& listCtrl=GetListCtrl();
POSITION pos=listCtrl.GetFirstSelectedItemPosition();
if (pos==NULL)
{
//如果没有选择记录,则提示并退出
AfxMessageBox("请选中要播放的歌曲!:)");
return;
}
else
{
//获取当前记录的位置游标
int iSelCur=listCtrl.GetNextSelectedItem(pos);
CString strNameText,strDirText,strFullPath;
strFullPath.Empty();
//初始化想要播放的歌曲信息
strNameText=listCtrl.GetItemText(iSelCur,0);
strDirText=listCtrl.GetItemText(iSelCur,8);
strFullPath=strDirText+"\\"+strNameText+".mp3";
//检测该文件的存在性,如不存在自然不能播放
CString strTittle;
strTittle.Format("歌曲:<<%s>>已丢失",strNameText);
OFSTRUCT ofs;
HFILE hf = OpenFile(strFullPath,&ofs,OF_EXIST);
if(hf==HFILE_ERROR)
{
int iReturn=::MessageBox(GetSafeHwnd(),"删除该记录吗?",
strTittle,MB_YESNO|MB_ICONQUESTION);
if(iReturn==IDYES)
{
DeleteSong();
}
return;
}
//播放选定的文件
CMainFrame* pMainFrm=(CMainFrame*)AfxGetMainWnd();
//先停止播放
MCIWndStop(pMainFrm->m_PlayBar.m_hMp3);
if(pMainFrm->m_PlayBar.m_hMp3!=NULL)
{
//销毁播放窗口
MCIWndDestroy(pMainFrm->m_PlayBar.m_hMp3);
//将播放窗口句柄置空
pMainFrm->m_PlayBar.m_hMp3=NULL;
}
//播放选中的歌曲
pMainFrm->m_PlayBar.Play(strFullPath);
}
CListView::OnLButtonDblClk(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -