📄 clientwnd1.cpp
字号:
nIndex = 3;
break;
case 4://处理歌名长度查询时的坐标移动
if(nIndex < 1)
nIndex = 1;
break;
}
m_selectmenu[m_nMenuIndex].SetUpDwnIndex(nIndex);
break;//向上移 end
case 2://向下移
nIndex = m_selectmenu[m_nMenuIndex].GetUpDwnIndex();
++nIndex;
switch( m_nMenuIndex )
{
case 0://主菜单移动
if(nIndex > 4)
nIndex = 1;
break;
case 1://处理语种查询时的坐标移动
if(nIndex > m_nSpeechNum)
nIndex = 1;
break;
case 2://处理歌手查询时的坐标移动
if(nIndex > m_nSingerNum)
nIndex = 1;
break;
case 3://处理字母查询时的坐标移动
if(nIndex > 3)
nIndex = 1;
break;
case 4://处理歌名长度查询时的坐标移动
if(nIndex > 1)
nIndex = 1;
break;
}
m_selectmenu[m_nMenuIndex].SetUpDwnIndex(nIndex);
break;//向下移 end
case 3://向左移
switch( m_nMenuIndex )
{
case 3://处理字母查询时的坐标移动
nIndex = m_selectmenu[m_nMenuIndex].GetLftRtIndex();
--nIndex;
if(nIndex < 1)
nIndex = 10;
m_selectmenu[m_nMenuIndex].SetLftRtIndex(nIndex);
break;
case 4://处理歌名长度查询时的坐标移动
nIndex = m_selectmenu[m_nMenuIndex].GetLftRtIndex();
--nIndex;
if(nIndex < 1)
nIndex = 9;
m_selectmenu[m_nMenuIndex].SetLftRtIndex(nIndex);
break;
default:
break;
}
break;
case 4://向右移
switch( m_nMenuIndex )
{
case 3://处理字母查询时的坐标移动
nIndex = m_selectmenu[m_nMenuIndex].GetLftRtIndex();
++nIndex;
if(nIndex > 10)
nIndex = 1;
m_selectmenu[m_nMenuIndex].SetLftRtIndex(nIndex);
break;
case 4://处理歌名长度查询时的坐标移动
nIndex = m_selectmenu[m_nMenuIndex].GetLftRtIndex();
++nIndex;
if(nIndex > 9)
nIndex = 1;
m_selectmenu[m_nMenuIndex].SetLftRtIndex(nIndex);
break;
default:
break;
}
break;
default:
break;
}
//只有nMoveFlag在0和5之间时才显示菜单
if( nMoveFlag > 0 && nMoveFlag < 5)
ShowMenu(m_nMenuIndex);
}
//////////////////////////////////////////////////////////////////////////////////
//函数功能: 处理按键
void CClientWnd::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
CClientDC dc(this);
int nIndex;
char szText[256] = {0};
CString strsql;
//显示的是结帐页面时,只能按回车键重新连接服务器或按ESC退出程序
if( m_nMenuFlag == 7 && nChar != VK_RETURN && nChar != VK_ESCAPE )
return;
switch(nChar)
{
case VK_ESCAPE: //退出
PostMessage(WM_CLOSE);
break;
case VK_RETURN: //确认
switch( m_nMenuFlag )
{
case 1://主菜单操作
if(m_bFstRun)
{
m_bFstRun = false;
m_nMenuFlag = 1;//将m_nMenuFlag置1,在主菜单上操作
m_nMenuIndex = 0;
ShowMenu(0);
break;
}
int x;
int y;
x = m_selectmenu[m_nMenuIndex].GetLftRtIndex();
y = m_selectmenu[m_nMenuIndex].GetUpDwnIndex();
nIndex = (x-1)*10+y;
m_nMenuIndex = nIndex;
ShowMenu(m_nMenuIndex);
m_nMenuFlag = 2;//将m_nMenuFlag置2,下一步将执行查询操作
break;
case 2://将执行查询操作
SelectSong();
m_strAlphabet = "";
break;
case 6://当前显示的为查询时间和费用,此时按确定回到主菜单
m_nMenuFlag = 1;//将m_nMenuFlag置1,在主菜单上操作
m_nMenuIndex = 0;
ShowMenu(0);
this->SetFocus();
break;
case 7://当前显示的为结帐的界面,此时按确定回到主菜单
//重新连接服务器
CClientSocket clientSocket;
if( !clientSocket.ReConnect() )
{
CDC mdc;
mdc.CreateCompatibleDC(&dc);
//加载位图
HBITMAP hbmp = LoadBitmap(m_conserver.GetAppPath() +
"picture\\login.bmp", m_nScreenX, m_nScreenY);
SelectObject(mdc.m_hDC, hbmp);
CString strmsg;
strmsg.Format("请到前台咨询");
int xpos = GetXPos(strmsg);
TextOut(&dc.m_hDC, xpos, 30, strmsg);
Sleep(500);//让字显示0.5秒钟
//用图片把字覆盖
dc.BitBlt(0, 0, m_nScreenX, 70, &mdc, 0, 0, SRCCOPY);
return;
}
if( !clientSocket.ConnectServer(CConnectServer::GetServerIp()) )
{
int xpos = GetXPos("连接失败服务器失败.");
dc.TextOut(xpos, 40, "连接失败服务器失败.");
dc.TextOut(xpos, 80, "请确认服务器是否打开");
dc.TextOut(xpos, 120, "或连接服务器的人过多");
dc.TextOut(xpos, 160, "请稍后再试.");
PostMessage(WM_CLOSE);//退出程序
return;
}
m_nMenuFlag = 1;//将m_nMenuFlag置1,在主菜单上操作
m_nMenuIndex = 0;
ShowMenu(0);
this->SetFocus();
break;
}
break;
case 'Q'://返回
if( m_nMenuFlag == 1 )//在主菜单页面上按返回键为结帐
{
m_nMenuFlag = 6;//将m_nMenuFlag置6,当前显示的为查询时间和费用
CDC mdc;
mdc.CreateCompatibleDC(&dc);
//加载位图
HBITMAP hbmp = LoadBitmap(m_conserver.GetAppPath() +
"picture\\login.bmp", m_nScreenX, m_nScreenY);
SelectObject(mdc.m_hDC, hbmp);
CClientSocket::SelectInfo();//向服务器发查询时间和费用的命令
CString strmsg;
strmsg.Format("您已用时: %s, 您应付%s块.", m_strUsedTime,
m_strPayforMoney);
m_strUsedTime = "";
m_strPayforMoney = "";
int xpos = GetXPos(strmsg);
TextOut(&mdc.m_hDC, xpos, 200, strmsg, RGB(255,0,255));
xpos = GetXPos("按确定返回主菜单,按返回键结帐.");
TextOut(&mdc.m_hDC, xpos, m_nScreenY-100,
"按确定键返回主菜单,按返回键结帐.", RGB(255,0,255));
dc.BitBlt(0, 0, m_nScreenX, m_nScreenY, &mdc, 0, 0, SRCCOPY);
break;
}
else if( m_nMenuFlag == 6 )//在查询时间和费用的界面上按返回则结帐
{
m_nMenuFlag = 7;//将m_nMenuFlag置7,显示结帐界面
int xpos = GetXPos("谢谢光临,欢迎下次再来.");
TextOut(&dc.m_hDC, xpos, m_nScreenY/2-40, "谢谢光临,欢迎下次再来.",
RGB(255,0,255));
TextOut(&dc.m_hDC, xpos, m_nScreenY/2, "请到前台结帐.",
RGB(255,0,255));
//通知服务器结帐
char szmsg[] = "payment";
CClientSocket::SendMsg(szmsg, sizeof(szmsg));
break;
}
else if( m_nMenuFlag != 3 && m_nMenuFlag != 1 && m_nMenuFlag < 6)
{//当m_nMenuFlag等于2, 4或5时,返回主菜单
m_nMenuFlag = 1;
m_nMenuIndex = 0;
ShowMenu(m_nMenuIndex);
}
else if( m_nMenuFlag == 3 )
{//当m_nMenuFlag等于3即为选歌操作时,返回到上一级菜单,执行查询操作
m_nMenuFlag = 2;
ShowMenu(m_nMenuIndex);
}
break;
case VK_PRIOR://上页
Flip(1);
break;
case VK_NEXT://下页
Flip(2);
break;
case VK_UP://上移
MovePosition(1);
break;
case VK_DOWN://下移
MovePosition(2);
break;
case 190: case VK_LEFT://左移
MovePosition(3);
break;
case 191: case VK_RIGHT://右移 begin
MovePosition(4);
break;//右移 end
//数字0-9
case '0': case '1': case '2': case '3': case '4':
case '5': case '6': case '7': case '8': case '9':
int nkey;
nkey = nChar - '0';
/*m_nMenuFlag 1: 主菜单操作 2: 查询操作 3: 选歌操作 4: 删歌操作 5: 播放歌曲*/
switch( m_nMenuFlag )
{
case 1://主菜单操作 begin
if( nkey > 0 && nkey < m_selectmenu[m_nMenuIndex].GetMenuItemNum())
{
ShowMenu(nkey);
m_nMenuIndex = nkey;
m_nMenuFlag = 2;
}
break;//主菜单操作 end
case 2://将执行查询操作
if( m_nMenuIndex == 3 )//是否为按字母查询
{
if( nkey == 0 )//0键用于选择单个字母
{
int x = m_selectmenu[m_nMenuIndex].GetLftRtIndex();
int y = m_selectmenu[m_nMenuIndex].GetUpDwnIndex();
int nIndex = (y-1)*10+x;
m_strAlphabet += m_selectmenu[m_nMenuIndex].m_strMenuItem[nIndex];
int xpos = GetXPos("请选择首字母:");
TextOut(&dc.m_hDC, xpos, 280, m_strAlphabet);
}
else if( nkey == 3 )//数字3用于删除上一个字母
{
CDC mdc;
mdc.CreateCompatibleDC(&dc);
//加载位图
HBITMAP hbmp = LoadBitmap(m_conserver.GetAppPath() +
"picture\\login.bmp", m_nScreenX, m_nScreenY);
SelectObject(mdc.m_hDC, hbmp);
int xpos = GetXPos("请选择首字母:");
int ypos = 280;
dc.BitBlt(xpos, ypos, 100, 50, &mdc, xpos, ypos, SRCCOPY);
m_strAlphabet = m_strAlphabet.Left(m_strAlphabet.GetLength()-1);
TextOut(&dc.m_hDC, xpos, 280, m_strAlphabet);
}
break;
}
SelectSong(nkey);
break;
case 3://选定一首歌 begin
int ret;
nkey = (nkey == 0) ? m_nPageIndex*10 : (m_nPageIndex-1)*10 + nkey;
ret = AddSong(nkey);
if( ret > 0 )
{
//发送消息到服务器,所选歌曲已更改
CClientSocket::SendMsg("LoadAgain", 10);
CDC mdc;
mdc.CreateCompatibleDC(&dc);
//加载位图
HBITMAP hbmp = LoadBitmap(m_conserver.GetAppPath() +
"picture\\login.bmp", m_nScreenX, m_nScreenY);
SelectObject(mdc.m_hDC, hbmp);
CString strmsg;
if( ret == 2 )
strmsg.Format("这首歌已在播放列表中,请选择其它歌");
else
strmsg.Format("您已选定第%d首歌,按已点歌单查看已点歌曲", nkey);
int xpos = GetXPos(strmsg);
TextOut(&dc.m_hDC, xpos, 30, strmsg);
Sleep(500);//让字显示0.5秒钟
//用图片把字覆盖
dc.BitBlt(0, 0, m_nScreenX, 70, &mdc, 0, 0, SRCCOPY);
}
break;//选定一首歌 end
case 4://删除一首歌
if(m_pSelectID == NULL)
break;
if(nkey > m_pSelectID[0])
break;
nkey = (nkey == 0) ? m_nPageIndex*10 : (m_nPageIndex-1)*10 + nkey;
strsql.Format("delete from request where ID=%d", m_pSelectID[nkey]);
m_addrecord.GetRecordsetPtr(strsql);
SendMessage(WM_KEYDOWN, VK_F6);
break;
case 5://播放歌曲
if( m_pSelectID == NULL )
break;
if( nkey > m_pSelectID[0] || ( nkey == 0 && m_pSelectID[0] < 10) )
break;
m_nMenuFlag = 6;
m_playsong.ShowWindow(SW_SHOW);
m_playsong.Play( (nkey == 0) ?
m_nPageIndex*10 : (m_nPageIndex-1)*10 + nkey - 1 );
break;
}
break;//数字键 end
case VK_F4: //已点歌单 begin
gethostname(szText, sizeof(szText));
strsql.Format("select * from request where username='%s' order by playseq",
szText);
ShowSelectSong(strsql, "已点歌清单,按对应的数字键播放:", false, false);
m_nMenuFlag = 5;//将m_nMenuFlag置5, 播放歌曲
//将已选歌曲列表保存
if( m_pSelectID == NULL )
break;
int i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -