📄 songlistview.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 + -