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

📄 songlistview.cpp

📁 点歌系统
💻 CPP
字号:
// SonglistView.cpp : implementation file
//

#include "stdafx.h"
#include "songserver.h"
#include "SonglistView.h"

#include "ServerSocket.h"
#include "AddRecord.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSonglistView
HTREEITEM CSonglistView::m_hSubItem[5] = {NULL};
CString   CSonglistView::m_strUserName[5] = {"lili"};
BOOL      CSonglistView::m_bLoadAgain[5] = {false};

IMPLEMENT_DYNCREATE(CSonglistView, CTreeView)

CSonglistView::CSonglistView()
{
}

CSonglistView::~CSonglistView()
{
}

BEGIN_MESSAGE_MAP(CSonglistView, CTreeView)
	//{{AFX_MSG_MAP(CSonglistView)
	ON_WM_CREATE()
	ON_NOTIFY_REFLECT(NM_CLICK, OnClick)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CSonglistView drawing

void CSonglistView::OnDraw(CDC* pDC)
{
	CDocument* pDoc = GetDocument();
	// TODO: add draw code here
}

/////////////////////////////////////////////////////////////////////////////
// CSonglistView diagnostics

#ifdef _DEBUG
void CSonglistView::AssertValid() const
{
	CTreeView::AssertValid();
}

void CSonglistView::Dump(CDumpContext& dc) const
{
	CTreeView::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CSonglistView message handlers
//自定义消息,显示客户点所点歌曲
void CSonglistView::OnAddUser(int nIndex, char* szUserName)
{ 
	if( nIndex > 4)
		return;

    m_strUserName[nIndex] = szUserName;
	SetLoadAgain(nIndex);
}

//重新从数据库得到用户所点的歌
void CSonglistView::SetLoadAgain(int nIndex)
{
 	m_bLoadAgain[nIndex] = true;
}

BOOL CSonglistView::PreCreateWindow(CREATESTRUCT& cs) 
{
    cs.style |= TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT;
	return CTreeView::PreCreateWindow(cs);
}

int CSonglistView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CTreeView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	CTreeCtrl& treectrl = GetTreeCtrl();

	treectrl.SetTextColor(RGB(0, 0, 255));
	
	HTREEITEM hRoot;
 	TV_INSERTSTRUCT tvInsert;
	
	//设置树行控件的属性
	tvInsert.hParent=TVI_ROOT;
	tvInsert.hInsertAfter=TVI_LAST;
	tvInsert.item.mask=TVIF_TEXT|TVIF_PARAM;
    tvInsert.item.pszText="各房间点歌情况";
	tvInsert.item.lParam=0;
      
	//插入首节点
	hRoot=treectrl.InsertItem(&tvInsert);
	
	for(int i = 1; i <= 5; i++)
	{
		CString strSubtext;
		strSubtext.Format("%d号房间", i);

		tvInsert.hParent=hRoot;
		tvInsert.item.pszText = strSubtext.GetBuffer(0);
		m_hSubItem[i-1] = treectrl.InsertItem(&tvInsert);
	}

    //将树行控件展开
	treectrl.Expand(hRoot, TVE_EXPAND);

 	return 0;
}

void CSonglistView::OnClick(NMHDR* pNMHDR, LRESULT* pResult) 
{
 	CTreeCtrl& treectrl = GetTreeCtrl();
	if( treectrl.GetRootItem() == treectrl.GetSelectedItem() )
	{
		for(int i = 0; i < 5; i++)
		{
			if(m_strUserName[i].IsEmpty() || !m_bLoadAgain[i] )
				continue;
 
 			treectrl.SetItemText(m_hSubItem[i], m_strUserName[i] + " 房间");
			InsertItem( i );
 			m_bLoadAgain[i] = false;
		}
	}
 	
	*pResult = 0;
}

void CSonglistView::InsertItem(int nIndex)
{
	CAddRecord      addrecord;
	_RecordsetPtr   pRequestPtr;
 	TV_INSERTSTRUCT tvInsert;

	CTreeCtrl& treectrl = GetTreeCtrl();
	if( m_bLoadAgain[nIndex] )
	{
        HTREEITEM hTmp;
 		HTREEITEM hCurrent = treectrl.GetChildItem(m_hSubItem[nIndex]);
		while( hCurrent != NULL)
		{
			hTmp = hCurrent;
 			hCurrent = treectrl.GetNextItem(hCurrent, TVGN_NEXT);
			treectrl.DeleteItem(hTmp);
		}
	}

	CString strsql;
	strsql.Format("select songname from request where username='%s'", m_strUserName[nIndex]);

	pRequestPtr = addrecord.GetRecordsetPtr(strsql);
	if( pRequestPtr == NULL)
		return;
	if( !pRequestPtr->BOF )
		pRequestPtr->MoveFirst();
	else 
		return;

	_variant_t vtsongname;
	while( !pRequestPtr->adoEOF )
	{
		vtsongname = pRequestPtr->GetCollect("songname");
		
		tvInsert.hParent = m_hSubItem[nIndex];
		tvInsert.hInsertAfter = TVI_LAST;
		tvInsert.item.mask = TVIF_TEXT|TVIF_PARAM;
		strsql = (LPCTSTR)(_bstr_t)vtsongname;
		tvInsert.item.pszText = strsql.GetBuffer(0);
 		tvInsert.item.lParam = 0;

		treectrl.InsertItem(&tvInsert);

		pRequestPtr->MoveNext();
	}
}

 

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -