?? clientwnd.cpp
字號:
if(nIndex < 1)
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;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -