📄 clientwnd1.cpp
字号:
m_playsong.SetFilePath(m_addrecord.GetSongPath(m_pSelectID[1]));
for(i = 2; i <= m_pSelectID[0]; i++)
m_playsong.SetFilePath(m_addrecord.GetSongPath(m_pSelectID[i]));
break;//已点歌单 end
case VK_F6://删歌
gethostname(szText, sizeof(szText));
strsql.Format("select * from request where username='%s' order by playseq",
szText);
ShowSelectSong(strsql, "已点歌清单,按对应的数字键删除:", false, false);
m_nMenuFlag = 4;//将m_nMenuFlag置4,执行删歌操作
//发送消息到服务器,所选歌曲已更改
CClientSocket::SendMsg("LoadAgain", 10);
break;
case 'T'://TV和VGA
break;
}
CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
//////////////////////////////////////////////////////////////////////////////////
//函数功能: 显示菜单
//参数说明: nMenuIndex: 当前菜单索引
void CClientWnd::ShowMenu(int nMenuIndex)
{
CClientDC dc(this);
CDC mdc;
CDC mdcsgn;
mdcsgn.CreateCompatibleDC(&dc);
mdc.CreateCompatibleDC(&dc);
//加载位图
HBITMAP hbmpsgn;
HBITMAP hbmp = LoadBitmap(m_conserver.GetAppPath() + "picture\\login.bmp", m_nScreenX, m_nScreenY);
SelectObject(mdc.m_hDC, hbmp);
int xpos = GetXPos(m_selectmenu[nMenuIndex].m_strMenuItem[0].GetBuffer(0));
int ypos = 40;
int i, j;
TextOut(&mdc.m_hDC, xpos-200, ypos+=40, m_selectmenu[nMenuIndex].m_strMenuItem[0], RGB(255,0,255));
xpos-=150;
int x = m_selectmenu[nMenuIndex].GetLftRtIndex();
int y = m_selectmenu[nMenuIndex].GetUpDwnIndex();
switch( nMenuIndex )
{
case 0://显示主菜单
case 1://显示语种查询菜单
case 2://显示歌手查询菜单
for(i = 1; i < m_selectmenu[nMenuIndex].GetMenuItemNum(); i++)
{
TextOut(&mdc.m_hDC, xpos, ypos+i*40, m_selectmenu[nMenuIndex].m_strMenuItem[i]);
}
int nIndex;
nIndex = (x-1)*10+y;
if( nMenuIndex == 2 )//贴上各歌手的图片
{
hbmpsgn = LoadBitmap(m_strSingerPath[nIndex-1], 120, 150);
SelectObject(mdcsgn.m_hDC, hbmpsgn);
BitBlt(mdc.m_hDC, xpos+200, ypos+40, 120, 150, mdcsgn.m_hDC, 0, 0, SRCCOPY);
}
TextOut(&mdc.m_hDC, xpos+(x-1)*40, ypos+y*40, m_selectmenu[nMenuIndex].m_strMenuItem[nIndex], RGB(255,0,255));
if( nMenuIndex == 0 )
{
int xpos = GetXPos("按返回键查询已用时间和费用.");
TextOut(&mdc.m_hDC, xpos, m_nScreenY-100, "按返回键查询已用时间和费用.", RGB(255,0,255));
}
break;
case 3://显示字母查询菜单
for(i = 0; i < m_selectmenu[nMenuIndex].GetMenuItemNum()/10 + 1; i++)
{
for( j = 1; j < 11; j++)
{
if(i*10+j < m_selectmenu[nMenuIndex].GetMenuItemNum())
TextOut(&mdc.m_hDC, xpos+(j-1)*40, ypos+(i+1)*40, m_selectmenu[nMenuIndex].m_strMenuItem[i*10+j]);
}
}
if( (y-1)*10+x > 26)//判断移动后的位置是否大于26,是则改变X,Y坐标,
{
if( x > 6 )
{
x = 1;
m_selectmenu[nMenuIndex].SetLftRtIndex(x);
}
else if( x < 0 )
{
x = 6;
m_selectmenu[nMenuIndex].SetLftRtIndex(x);
}
m_selectmenu[nMenuIndex].SetUpDwnIndex(y);
}
TextOut(&mdc.m_hDC, xpos+(x-1)*40, ypos+y*40, m_selectmenu[nMenuIndex].m_strMenuItem[(y-1)*10+x], RGB(255,0,255));
TextOut(&mdc.m_hDC, xpos-40, ypos+200, "歌名首字母: ", RGB(255,0,255));
TextOut(&mdc.m_hDC, xpos+150, ypos+200, m_strAlphabet);
TextOut(&mdc.m_hDC, xpos-40, m_nScreenY-100, "按0选择字母,3删除字母,确定键查询", RGB(255,0,255));
break;
case 4://显示歌名长度菜单
for(i = 1; i < 10; i++)
{
TextOut(&mdc.m_hDC, xpos+(i-1)*40, ypos+40, m_selectmenu[nMenuIndex].m_strMenuItem[i]);
}
TextOut(&mdc.m_hDC, xpos+(x-1)*40, ypos+y*40, m_selectmenu[nMenuIndex].m_strMenuItem[(y-1)*10+x], RGB(255,0,255));
break;
}
dc.BitBlt(0, 0, m_nScreenX, m_nScreenY, &mdc, 0, 0, SRCCOPY);
}
//////////////////////////////////////////////////////////////////////////////////
//函数功能: 执行查询操作
/*参数说明: nIndex == 0 为按确认键时调用
nIndex != 0 为按下的数字键 */
void CClientWnd::SelectSong(int nIndex)
{
int npos;
int nTotallen;//字符串总长度,得到查询条件时用
CString strsql;//SQL语句
CString strtmp;
if( nIndex == 0 )
{
//计算当前选中的菜单在数组中的位置
int x = m_selectmenu[m_nMenuIndex].GetLftRtIndex();
int y = m_selectmenu[m_nMenuIndex].GetUpDwnIndex();
if( m_nMenuIndex < 3 )//列优先
nIndex = (x-1)*10+y;
else//行优先
nIndex = (y-1)*10+x;
if( m_strAlphabet.IsEmpty() )
m_strAlphabet = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex];
}
switch( m_nMenuIndex )
{
case 1://按语种查询
if( nIndex > 0 && nIndex < m_selectmenu[m_nMenuIndex].GetMenuItemNum())
{
//从当前选中的菜单项中找出用于查询的关键字保存在strtmp中
nTotallen = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex].GetLength();
npos = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex].Find("、");
strtmp = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex].Right(nTotallen - npos - 3);
strsql.Format("select ID, songname, singer from songlist where speech='%s' order by songname", strtmp);
ShowSelectSong(strsql);
m_nMenuFlag = 3;//将m_nMenuFlag置3,下一步将执行选歌操作
}
break;//按语种查询 end
case 2://按歌手查询 begin
if( nIndex > 0 && nIndex < m_selectmenu[m_nMenuIndex].GetMenuItemNum())
{
//从当前选中的菜单项中找出用于查询的关键字保存在strtmp中
nTotallen = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex].GetLength();
npos = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex].Find("、");
strtmp = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex].Right(nTotallen - npos - 3);
strsql.Format("select ID, songname, singer from songlist where singer='%s' order by songname", strtmp);
ShowSelectSong(strsql);
m_nMenuFlag = 3;
}
break;//按歌手查询 end
case 3://按字母查询
if( nIndex > 0 && nIndex < m_selectmenu[m_nMenuIndex].GetMenuItemNum())
{
strsql.Format("select ID, songname, singer, fstalphabet from songlist order by songname", m_strAlphabet);
ShowSelectSong(strsql);
m_nMenuFlag = 3;//将m_nMenuFlag置3,下一步将执行选歌
}
break;
case 4://按歌名长度查询
if( nIndex > 0 && nIndex < m_selectmenu[m_nMenuIndex].GetMenuItemNum())
{
strtmp = m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex];
strsql.Format("select ID, songname, singer from songlist where namelen='%s' order by songname", strtmp);
ShowSelectSong(strsql);
m_nMenuFlag = 3;//将m_nMenuFlag置3,下一步将执行选歌
}
break;
}
}
//////////////////////////////////////////////////////////////////////////////////
//函数功能: 将选定的歌显示在屏幕上
/*参数说明: lpszsql: 将执行的SQL查询语句
lpszTitle: 显示的提示信息
bPageDnUp: 是否为翻页, true为翻页
bSonglistTable: 是否为显示songlist表里的歌曲*/
void CClientWnd::ShowSelectSong(LPCTSTR lpszsql, LPCTSTR lpszTitle, BOOL bPageDnUp, BOOL bSonglistTable)
{
CClientDC dc(this);
DrawBGBmp();
int xpos;
int ypos = 40;
int nItemNum = 0;
m_strPreSelect = lpszsql;
try
{
_RecordsetPtr pRequestPtr;
pRequestPtr = m_addrecord.GetRecordsetPtr((_bstr_t)lpszsql);
if( !pRequestPtr->BOF )
pRequestPtr->MoveFirst();
else
{
xpos = GetXPos("没有您要找的歌,请重新查找");
TextOut(&dc.m_hDC, xpos, ypos, "没有您要找的歌,请重新查找", RGB(255,0,255));
return;
}
CString strFstAlphabet;
if( !bPageDnUp )//得到查询后的总歌数
{
m_nPageNum = 0;
while( !pRequestPtr->adoEOF )
{
if( bSonglistTable && m_nMenuIndex == 3 )//当前的查询为按字母查询,则从所有的歌中找出歌名首字母中含有要查询字母的歌
{
strFstAlphabet = (LPCTSTR)(_bstr_t)pRequestPtr->GetCollect("fstalphabet");
if( strFstAlphabet.Find(m_strAlphabet) != 0 )
{
pRequestPtr->MoveNext();
continue;
}
}
nItemNum++;
if( nItemNum > m_nPageNum*10 )
m_nPageNum++;
pRequestPtr->MoveNext();
}
if( nItemNum == 0 )
{
xpos = GetXPos("没有您要找的歌,请重新查找");
TextOut(&dc.m_hDC, xpos, ypos, "没有您要找的歌,请重新查找", RGB(255,0,255));
return;
}
if( m_pSelectID != NULL )
{
delete[] m_pSelectID;
m_pSelectID = NULL;
}
m_pSelectID = new int[nItemNum + 1];//分配一个数组,存入查询得到的歌的ID
m_pSelectID[0] = nItemNum;//0号位置存放ID的个数
m_nPageIndex = 1;
nItemNum = 0;
pRequestPtr->MoveFirst();
}
xpos = GetXPos(lpszTitle);
TextOut(&dc.m_hDC, xpos-200, ypos+=40, lpszTitle, RGB(255,0,255));
xpos-=150;
_variant_t vtID;
_variant_t vtsongname;
_variant_t vtsinger;
CString strmsg;
int nItemIndex = 0;
while( !pRequestPtr->adoEOF )
{
nItemIndex++;
if( bPageDnUp && bSonglistTable && nItemIndex <= (m_nPageIndex-1)*10 )//控制查询歌曲时的翻页
{
pRequestPtr->MoveNext();
continue;
}
if( !bPageDnUp && bSonglistTable && m_nMenuIndex == 3 )//当前的查询为按字母查询,则从所有的歌中找出歌名首字母中含有要查询字母的歌
{
strFstAlphabet = (LPCTSTR)(_bstr_t)pRequestPtr->GetCollect("fstalphabet");
if( strFstAlphabet.Find(m_strAlphabet) != 0 )
{
pRequestPtr->MoveNext();
continue;
}
}
int nID;
nItemNum++;
if( !bPageDnUp )//是否为翻页, 否, 则把ID存入数组
{
vtID = pRequestPtr->GetCollect("ID");
nID = atoi((LPCTSTR)(_bstr_t)vtID);
m_pSelectID[nItemNum] = nID;
}
if( nItemNum <= 10 )//每页显示十首歌,当nItemNum>10时,不再显示
{
vtsinger = pRequestPtr->GetCollect("singer");
vtsongname = pRequestPtr->GetCollect("songname");
strmsg.Format( "%-3d、 %-20s %-10s",
nItemNum,
(LPCTSTR)(_bstr_t)vtsongname,
(LPCTSTR)(_bstr_t)vtsinger );
TextOut(&dc.m_hDC, xpos, ypos+=40, strmsg);
}
pRequestPtr->MoveNext();
}
// TextOut(&dc.m_hDC,
}
catch(_com_error e)
{
AfxMessageBox(e.ErrorMessage());
return;
}
}
//////////////////////////////////////////////////////////////////////////////////
//函数功能: 将选定的歌曲加到数据库中
/*参数说明: nIndex: 选定歌曲在数组m_pSelectID中的下标
返回值说明: 返回0: 失败 返回1: 成功 返回2: 该歌已选过*/
BOOL CClientWnd::AddSong(int nIndex)
{
if(nIndex > m_pSelectID[0])
return 0;
char hostname[256];
gethostname(hostname, sizeof(hostname));
try
{
CString strsql;
strsql.Format("select * from songlist where ID=%d", m_pSelectID[nIndex]);
_RecordsetPtr pRequestPtr;
pRequestPtr = m_addrecord.GetRecordsetPtr(strsql);
char szID[10];
_variant_t vtsongname;
_variant_t vtsinger;
itoa(m_pSelectID[nIndex], szID, 10);
vtsongname = pRequestPtr->GetCollect("songname");
vtsinger = pRequestPtr->GetCollect("singer");
if( m_addrecord.SaveRecord(m_pSelectID[nIndex], hostname, vtsongname, vtsinger) == 2 )
return 2;
}
catch(_com_error e)
{
AfxMessageBox((CString)e.ErrorMessage() + "选歌失败");
return 0;
}
return 1;
}
void CClientWnd::SetUsedTime(LPCTSTR lpszUsedTime)
{
m_strUsedTime = lpszUsedTime;
}
void CClientWnd::SetPayforMoney(LPCTSTR lpszPayforMoney)
{
m_strPayforMoney = lpszPayforMoney;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -