Menu.cpp
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:24k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // Menu.cpp: implementation of the CMenu class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #include "stdafx.h"
  5. #include "Menu.h"
  6. #include "Audio.h"
  7. #include "math.h"
  8. #include "RasterText.h"
  9. //////////////////////////////////////////////////////////////////////
  10. // Construction/Destruction
  11. //////////////////////////////////////////////////////////////////////
  12. CMenu::CMenu(float FOVangle)
  13. {
  14. }
  15. CMenu::~CMenu()
  16. {
  17. }
  18. ////////////////////////////////////////////////////////
  19. int CMenu::DoMenu(HWND hWnd,HDC hDC,bool IsMainMenu)
  20. {
  21.     if(IsMainMenu)m_iCurMenu=m_iOldMenu=0;
  22. else m_iCurMenu=m_iOldMenu=1;
  23.     m_bExit=false;
  24. GameReturn=1;
  25. cSelect.Init(hWnd,2);
  26. cBkg.Init(hWnd, 1);
  27. cSelect.Create(1,"menu/1.wav",false);
  28. cSelect.Create(0,"menu/0.wav",false);
  29. cBkg.Create(0,"menu/piano.wav",false);
  30.     cBkg.Play(0,50);
  31. ShowCursor(true);
  32. glDisable(GL_DEPTH_TEST);
  33. while(!m_bExit)
  34. {
  35. switch(m_iCurMenu)
  36. {
  37. case 0: DoMainMenu(hDC);break;
  38. // case 1: DoSaveAndLoadMenu(hDC);break;
  39. case 2: DoSinglePlayerMenu(hDC);break;
  40. case 3: DoMultiPlayerMenu(hDC);break;
  41. case 4: DoOptionMenu(hDC);break;
  42. case 5: DoAboutMenu(hDC,true);break;
  43. case 6: DoAboutMenu(hDC,false);break;
  44. case 7: DoExitMenu();break;
  45. case 8: DoNewGameMenu(hDC);break;
  46. case 9: DoLoadGameMenu(hDC);break;
  47. // case 10: DoSaveGameMenu(hDC);break;
  48. }
  49. }
  50.     glEnable(GL_DEPTH_TEST);
  51. glDisable(GL_BLEND);
  52. cSelect.Shutdown();
  53. cBkg.Shutdown();
  54. return GameReturn;
  55. }
  56. ///////////////////////////////////////////////////////////
  57. void CMenu::DoMainMenu(HDC hDC)
  58. {
  59. AUX_RGBImageRec * pMainMenu=NULL;
  60. AUX_RGBImageRec * pItemDown=NULL;
  61. AUX_RGBImageRec * pItemOn=NULL;
  62. pMainMenu=auxDIBImageLoad("menu/mainmenu.bmp");
  63. pItemDown=auxDIBImageLoad("menu/down.bmp");
  64. pItemOn=auxDIBImageLoad("menu/on.bmp");
  65. // if(!LoadPicture("menu/mainmenu.bmp",pMainMenu))return;
  66. // if(!LoadPicture("menu/down.bmp",pItemDown))return;
  67. // if(!LoadPicture("menu/on.bmp",pItemOn))return;
  68. int     curItem=-1;
  69. int     oldItem=-1;
  70. RECT    rectItem[6];
  71.     for(int i=0;i<6;i++)
  72. {
  73. rectItem[i].left=360;
  74. rectItem[i].right=720;
  75. rectItem[i].top=140+i*60;
  76. rectItem[i].bottom=195+i*60;
  77. }
  78.     bool done=true;
  79.     m_bLBtnDown=m_bLBtnUp=false;
  80. ////////////////////////
  81. // ::ShowCursor(true);
  82. MSG msg;
  83.    while(done) // Loop That Runs While done=FALSE
  84. {
  85.  
  86. if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  87. {
  88. if (msg.message==WM_QUIT) // Have We Received A Quit Message?
  89. {
  90. done=false; // If So done=TRUE
  91. }
  92. else if(msg.message==WM_LBUTTONDOWN)
  93. {
  94. m_bLBtnDown=true;
  95. m_bLBtnUp=false;
  96. }
  97. else if(msg.message==WM_LBUTTONUP)
  98. {
  99. m_bLBtnDown=false;
  100. m_bLBtnUp=true;
  101. }
  102. else if(msg.message==WM_MOUSEMOVE)
  103. {
  104. m_bLBtnUp=false;
  105. }
  106. else // If Not, Deal With Window Messages
  107. {
  108. TranslateMessage(&msg); // Translate The Message
  109. DispatchMessage(&msg); // Dispatch The Message
  110. }
  111. }
  112. else // If There Are No Messages
  113. {   
  114.  
  115.                glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色
  116.                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  117.                glLoadIdentity();
  118.                DrawPicture(0,600,pMainMenu);
  119.     glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR);
  120. // glEnable(GL_BLEND);
  121.                GetCursorPos(&m_mpos);
  122.    curItem=-1;
  123.    for(int index=0;index<6;index++)
  124.    {
  125.    if(m_mpos.x>rectItem[index].left &&m_mpos.x<rectItem[index].right &&
  126.       m_mpos.y>rectItem[index].top && m_mpos.y<rectItem[index].bottom)
  127.    curItem=index;    
  128.    }
  129.    if(oldItem!=curItem)
  130.    {
  131.    if(curItem!=-1)cSelect.Play(0,1);
  132.        oldItem=curItem;
  133.    }
  134.    //////////////////////
  135.    if(curItem!=-1)
  136.    {
  137.    if(m_bLBtnDown)DrawPicture(360,195+curItem*62,pItemDown);
  138.    else DrawPicture(360,195+curItem*62,pItemOn);
  139.    if(m_bLBtnUp )
  140.    {
  141.    done=false;
  142.    cSelect.Play(1,1);
  143.    m_iCurMenu=curItem+2;
  144.    if(m_iCurMenu==7)m_bExit=true;
  145.    }
  146.    }
  147.    //////////text
  148.           glDisable(GL_BLEND);
  149.    SwapBuffers(hDC);
  150. }
  151. }
  152. // Shutdown
  153.     DeletePicture(pMainMenu);
  154.     DeletePicture(pItemDown);
  155.     DeletePicture(pItemOn);
  156. }
  157. //////////////////////// DoSinglePlayerMenu  ////////////////////////
  158. void CMenu::DoSinglePlayerMenu(HDC hDC)
  159. {
  160. AUX_RGBImageRec * pMainMenu=NULL;
  161. AUX_RGBImageRec * pItemDown=NULL;
  162. AUX_RGBImageRec * pItemOn=NULL;
  163. pMainMenu=auxDIBImageLoad("menu/singleplayer.bmp");
  164. pItemDown=auxDIBImageLoad("menu/downmidle.bmp");
  165. pItemOn=auxDIBImageLoad("menu/onmidle.bmp");
  166. /*
  167. if(!LoadPicture("menu/singleplayer.bmp",pMainMenu))
  168. {
  169. MessageBox(NULL,"Load err.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  170.         m_bExit=true;
  171. return;
  172. }
  173. if(!LoadPicture("menu/downmidl.bmp",pItemDown))return;
  174. if(!LoadPicture("menu/onmid.bmp",pItemOn))return;*/
  175. int     curItem=-1;
  176. int     oldItem=-1;
  177. RECT    rectItem[3];
  178.     for(int i=0;i<3;i++)
  179. {
  180. rectItem[i].left=56+i*252;
  181. rectItem[i].right=236+i*252;
  182. rectItem[i].top=465;
  183. rectItem[i].bottom=525;
  184. }
  185.     bool done=true;
  186.     m_bLBtnDown=m_bLBtnUp=false;
  187. ////////////////////////
  188. // ::ShowCursor(true);
  189. MSG msg;
  190.    while(done) // Loop That Runs While done=FALSE
  191. {
  192.  
  193. if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  194. {
  195. if (msg.message==WM_QUIT) // Have We Received A Quit Message?
  196. {
  197. done=false; // If So done=TRUE
  198. }
  199. else if(msg.message==WM_LBUTTONDOWN)
  200. {
  201. m_bLBtnDown=true;
  202. m_bLBtnUp=false;
  203. }
  204. else if(msg.message==WM_LBUTTONUP)
  205. {
  206. m_bLBtnDown=false;
  207. m_bLBtnUp=true;
  208. }
  209. else if(msg.message==WM_MOUSEMOVE)
  210. {
  211. m_bLBtnUp=false;
  212. }
  213. else // If Not, Deal With Window Messages
  214. {
  215. TranslateMessage(&msg); // Translate The Message
  216. DispatchMessage(&msg); // Dispatch The Message
  217. }
  218. }
  219. else // If There Are No Messages
  220. {   
  221.  
  222.                glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色
  223.                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  224.                glLoadIdentity();
  225.                DrawPicture(0,600,pMainMenu);
  226.     glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR);
  227. // glEnable(GL_BLEND);
  228.                GetCursorPos(&m_mpos);
  229.    curItem=-1;
  230.    for(int index=0;index<3;index++)
  231.    {
  232.    if(m_mpos.x>rectItem[index].left &&m_mpos.x<rectItem[index].right &&
  233.       m_mpos.y>rectItem[index].top && m_mpos.y<rectItem[index].bottom)
  234.    curItem=index;    
  235.    }
  236.    if(oldItem!=curItem)
  237.    {
  238.    if(curItem!=-1)cSelect.Play(0,1);
  239.        oldItem=curItem;
  240.    }
  241.    //////////////////////
  242.    if(curItem!=-1)
  243.    {
  244.    if(m_bLBtnDown)DrawPicture(56+curItem*252,525,pItemDown);
  245.    else DrawPicture(56+curItem*252,525,pItemOn);
  246.    if(m_bLBtnUp )
  247.    {
  248.    done=false;
  249.    cSelect.Play(1,1);
  250.    if(curItem==0)m_iCurMenu=0;
  251.    else
  252.    {
  253.    if(curItem==1)
  254.    {m_iCurMenu=9; }
  255.        else m_iCurMenu=8;
  256.       
  257.    }
  258.    }
  259.    }
  260.    //////////text
  261. glDisable(GL_BLEND);
  262.    SwapBuffers(hDC);
  263. }
  264. }
  265. // Shutdown
  266.     DeletePicture(pMainMenu);
  267.     DeletePicture(pItemDown);
  268.     DeletePicture(pItemOn);
  269. }
  270. //////////////////////// DoNewGameMenu  ////////////////////////
  271. void CMenu::DoNewGameMenu(HDC hDC)
  272. {
  273. AUX_RGBImageRec * pMainMenu=NULL;
  274. AUX_RGBImageRec * pItemDown=NULL;
  275. AUX_RGBImageRec * pItemOn=NULL;
  276. AUX_RGBImageRec * pLoading=NULL;
  277. pMainMenu=auxDIBImageLoad("menu/NewGame.bmp");
  278. pItemDown=auxDIBImageLoad("menu/downmidle.bmp");
  279. pItemOn=auxDIBImageLoad("menu/onmidle.bmp");
  280. pLoading=auxDIBImageLoad("menu/Loading.bmp");
  281. /*
  282. if(!LoadPicture("menu/singleplayer.bmp",pMainMenu))
  283. {
  284. MessageBox(NULL,"Load err.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  285.         m_bExit=true;
  286. return;
  287. }
  288. if(!LoadPicture("menu/downmidl.bmp",pItemDown))return;
  289. if(!LoadPicture("menu/onmid.bmp",pItemOn))return;*/
  290. int     curItem=-1;
  291. int     oldItem=-1;
  292. RECT    rectItem[2];
  293. rectItem[0].left=84; rectItem[0].right=264;
  294. rectItem[0].top=522; rectItem[0].bottom=580;
  295. rectItem[1].left=525; rectItem[1].right=705;
  296. rectItem[1].top=522; rectItem[1].bottom=580;
  297.     bool done=true;
  298.     m_bLBtnDown=m_bLBtnUp=false;
  299. ////////////////////////
  300. // ::ShowCursor(true);
  301. MSG msg;
  302.    while(done) // Loop That Runs While done=FALSE
  303. {
  304.  
  305. if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  306. {
  307. if (msg.message==WM_QUIT) // Have We Received A Quit Message?
  308. {
  309. done=false; // If So done=TRUE
  310. }
  311. else if(msg.message==WM_LBUTTONDOWN)
  312. {
  313. m_bLBtnDown=true;
  314. m_bLBtnUp=false;
  315. }
  316. else if(msg.message==WM_LBUTTONUP)
  317. {
  318. m_bLBtnDown=false;
  319. m_bLBtnUp=true;
  320. }
  321. else if(msg.message==WM_MOUSEMOVE)
  322. {
  323. m_bLBtnUp=false;
  324. }
  325. else // If Not, Deal With Window Messages
  326. {
  327. TranslateMessage(&msg); // Translate The Message
  328. DispatchMessage(&msg); // Dispatch The Message
  329. }
  330. }
  331. else // If There Are No Messages
  332. {   
  333.  
  334.                glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色
  335.                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  336.                glLoadIdentity();
  337.                DrawPicture(0,600,pMainMenu);
  338.     glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR);
  339. // glEnable(GL_BLEND);
  340.                GetCursorPos(&m_mpos);
  341.    curItem=-1;
  342.    for(int index=0;index<2;index++)
  343.    {
  344.    if(m_mpos.x>rectItem[index].left &&m_mpos.x<rectItem[index].right &&
  345.       m_mpos.y>rectItem[index].top && m_mpos.y<rectItem[index].bottom)
  346.    curItem=index;    
  347.    }
  348.    if(oldItem!=curItem)
  349.    {
  350.    if(curItem!=-1)cSelect.Play(0,1);
  351.        oldItem=curItem;
  352.    }
  353.    //////////////////////
  354.    if(curItem!=-1)
  355.    {
  356.    if(m_bLBtnDown)DrawPicture(84+curItem*440,580,pItemDown);
  357.    else DrawPicture(84+curItem*440,580,pItemOn);
  358.    if(m_bLBtnUp )
  359.    {
  360.    done=false;
  361.    cSelect.Play(1,1);
  362.    if(curItem==0)m_iCurMenu=2;
  363. else  
  364. {
  365. m_bExit=true;
  366. glDisable(GL_BLEND);
  367. DrawPicture(0,600,pLoading);
  368. ShowCursor(false);
  369. }
  370.       }
  371.    }
  372.    //////////text
  373. glDisable(GL_BLEND);
  374.    SwapBuffers(hDC);
  375. }
  376. }
  377. // Shutdown
  378.     DeletePicture(pMainMenu);
  379.     DeletePicture(pItemDown);
  380.     DeletePicture(pItemOn);
  381.     DeletePicture(pLoading);
  382. }
  383. /////////////////////////////////////////////////
  384. //////////////////////// DoLoadGameMenu  ////////////////////////
  385. void CMenu::DoLoadGameMenu(HDC hDC)
  386. {
  387. AUX_RGBImageRec * pMainMenu=NULL;
  388. AUX_RGBImageRec * pItemDown=NULL;
  389. AUX_RGBImageRec * pItemOn=NULL;
  390. AUX_RGBImageRec * pLoading=NULL;
  391. pMainMenu=auxDIBImageLoad("menu/LoadGame.bmp");
  392. pItemDown=auxDIBImageLoad("menu/downmidle.bmp");
  393. pItemOn=auxDIBImageLoad("menu/onmidle.bmp");
  394. pLoading=auxDIBImageLoad("menu/Loading.bmp");
  395. /*
  396. if(!LoadPicture("menu/singleplayer.bmp",pMainMenu))
  397. {
  398. MessageBox(NULL,"Load err.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  399.         m_bExit=true;
  400. return;
  401. }
  402. if(!LoadPicture("menu/downmidl.bmp",pItemDown))return;
  403. if(!LoadPicture("menu/onmid.bmp",pItemOn))return;*/
  404. int     curItem=-1;
  405. int     oldItem=-1;
  406. RECT    rectItem[2];
  407. rectItem[0].left=75; rectItem[0].right=252;
  408. rectItem[0].top=525; rectItem[0].bottom=582;
  409. rectItem[1].left=548; rectItem[1].right=725;
  410. rectItem[1].top=525; rectItem[1].bottom=582;
  411.     bool done=true;
  412.     m_bLBtnDown=m_bLBtnUp=false;
  413. ////////////////////////
  414. // ::ShowCursor(true);
  415. MSG msg;
  416.    while(done) // Loop That Runs While done=FALSE
  417. {
  418.  
  419. if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  420. {
  421. if (msg.message==WM_QUIT) // Have We Received A Quit Message?
  422. {
  423. done=false; // If So done=TRUE
  424. }
  425. else if(msg.message==WM_LBUTTONDOWN)
  426. {
  427. m_bLBtnDown=true;
  428. m_bLBtnUp=false;
  429. }
  430. else if(msg.message==WM_LBUTTONUP)
  431. {
  432. m_bLBtnDown=false;
  433. m_bLBtnUp=true;
  434. }
  435. else if(msg.message==WM_MOUSEMOVE)
  436. {
  437. m_bLBtnUp=false;
  438. }
  439. else // If Not, Deal With Window Messages
  440. {
  441. TranslateMessage(&msg); // Translate The Message
  442. DispatchMessage(&msg); // Dispatch The Message
  443. }
  444. }
  445. else // If There Are No Messages
  446. {   
  447.  
  448.                glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色
  449.                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  450.                glLoadIdentity();
  451.                DrawPicture(0,600,pMainMenu);
  452.     glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR);
  453. // glEnable(GL_BLEND);
  454.                GetCursorPos(&m_mpos);
  455.    curItem=-1;
  456.    for(int index=0;index<2;index++)
  457.    {
  458.    if(m_mpos.x>rectItem[index].left &&m_mpos.x<rectItem[index].right &&
  459.       m_mpos.y>rectItem[index].top && m_mpos.y<rectItem[index].bottom)
  460.    curItem=index;    
  461.    }
  462.    if(oldItem!=curItem)
  463.    {
  464.    if(curItem!=-1)cSelect.Play(0,1);
  465.        oldItem=curItem;
  466.    }
  467.    //////////////////////
  468.    if(curItem!=-1)
  469.    {
  470.    if(m_bLBtnDown)DrawPicture(75+curItem*473,582,pItemDown);
  471.    else DrawPicture(75+curItem*473,582,pItemOn);
  472.    if(m_bLBtnUp )
  473.    {
  474.    done=false;
  475.    cSelect.Play(1,1);
  476.    if(curItem==0)m_iCurMenu=2;
  477. else   
  478. {
  479. m_bExit=true;
  480. glDisable(GL_BLEND);
  481. DrawPicture(0,600,pLoading);
  482. ShowCursor(false);
  483. }
  484.   
  485.    }
  486.    }
  487.    //////////text
  488. glDisable(GL_BLEND);
  489.    SwapBuffers(hDC);
  490. }
  491. }
  492. // Shutdown
  493.     DeletePicture(pMainMenu);
  494.     DeletePicture(pItemDown);
  495.     DeletePicture(pItemOn);
  496.     DeletePicture(pLoading);
  497. }
  498. //////////////////////// DomultiPlayerMenu  ////////////////////////
  499. void CMenu::DoMultiPlayerMenu(HDC hDC)
  500. {
  501. AUX_RGBImageRec * pMainMenu=NULL;
  502. AUX_RGBImageRec * pItemDown=NULL;
  503. AUX_RGBImageRec * pItemOn=NULL;
  504. pMainMenu=auxDIBImageLoad("menu/multiplayer.bmp");
  505. pItemDown=auxDIBImageLoad("menu/downmidle.bmp");
  506. pItemOn=auxDIBImageLoad("menu/onmidle.bmp");
  507. /*
  508. if(!LoadPicture("menu/singleplayer.bmp",pMainMenu))
  509. {
  510. MessageBox(NULL,"Load err.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  511.         m_bExit=true;
  512. return;
  513. }
  514. if(!LoadPicture("menu/downmidl.bmp",pItemDown))return;
  515. if(!LoadPicture("menu/onmid.bmp",pItemOn))return;*/
  516. int     curItem=-1;
  517. int     oldItem=-1;
  518. RECT    rectItem[2];
  519.   rectItem[0].left=35; rectItem[0].right=212;
  520. rectItem[0].top=514; rectItem[0].bottom=572;
  521. rectItem[1].left=221; rectItem[1].right=400;
  522. rectItem[1].top=514; rectItem[1].bottom=572;
  523.     bool done=true;
  524.     m_bLBtnDown=m_bLBtnUp=false;
  525. ////////////////////////
  526. // ::ShowCursor(true);
  527. MSG msg;
  528.    while(done) // Loop That Runs While done=FALSE
  529. {
  530.  
  531. if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  532. {
  533. if (msg.message==WM_QUIT) // Have We Received A Quit Message?
  534. {
  535. done=false; // If So done=TRUE
  536. }
  537. else if(msg.message==WM_LBUTTONDOWN)
  538. {
  539. m_bLBtnDown=true;
  540. m_bLBtnUp=false;
  541. }
  542. else if(msg.message==WM_LBUTTONUP)
  543. {
  544. m_bLBtnDown=false;
  545. m_bLBtnUp=true;
  546. }
  547. else if(msg.message==WM_MOUSEMOVE)
  548. {
  549. m_bLBtnUp=false;
  550. }
  551. else // If Not, Deal With Window Messages
  552. {
  553. TranslateMessage(&msg); // Translate The Message
  554. DispatchMessage(&msg); // Dispatch The Message
  555. }
  556. }
  557. else // If There Are No Messages
  558. {   
  559.  
  560.                glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色
  561.                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  562.                glLoadIdentity();
  563.                DrawPicture(0,600,pMainMenu);
  564.     glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR);
  565. // glEnable(GL_BLEND);
  566.                GetCursorPos(&m_mpos);
  567.    curItem=-1;
  568.    for(int index=0;index<2;index++)
  569.    {
  570.    if(m_mpos.x>rectItem[index].left &&m_mpos.x<rectItem[index].right &&
  571.       m_mpos.y>rectItem[index].top && m_mpos.y<rectItem[index].bottom)
  572.    curItem=index;    
  573.    }
  574.    if(oldItem!=curItem)
  575.    {
  576.    if(curItem!=-1)cSelect.Play(0,1);
  577.        oldItem=curItem;
  578.    }
  579.    //////////////////////
  580.    if(curItem!=-1)
  581.    {
  582.    if(m_bLBtnDown)DrawPicture(35+curItem*186,572,pItemDown);
  583.    else DrawPicture(35+curItem*186,572,pItemOn);
  584.    if(m_bLBtnUp )
  585.    {
  586.    done=false;
  587.    cSelect.Play(1,1);
  588.    if(curItem==0)m_iCurMenu=0;
  589.    else
  590.    {
  591.   // if(curItem==1)
  592.   // {m_iCurMenu=9; }
  593.        //else m_iCurMenu=8;
  594.       
  595.    }
  596.    }
  597.    }
  598.    //////////text
  599. glDisable(GL_BLEND);
  600.    SwapBuffers(hDC);
  601. }
  602. }
  603. // Shutdown
  604.     DeletePicture(pMainMenu);
  605.     DeletePicture(pItemDown);
  606.     DeletePicture(pItemOn);
  607. }
  608. //////////////////////// DoOptionMenu  ////////////////////////
  609. void CMenu::DoOptionMenu(HDC hDC)
  610. {
  611. AUX_RGBImageRec * pMainMenu=NULL;
  612. AUX_RGBImageRec * pItemDown=NULL;
  613. AUX_RGBImageRec * pItemOn=NULL;
  614. pMainMenu=auxDIBImageLoad("menu/Option.bmp");
  615. pItemDown=auxDIBImageLoad("menu/downmidle.bmp");
  616. pItemOn=auxDIBImageLoad("menu/onmidle.bmp");
  617. /*
  618. if(!LoadPicture("menu/singleplayer.bmp",pMainMenu))
  619. {
  620. MessageBox(NULL,"Load err.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  621.         m_bExit=true;
  622. return;
  623. }
  624. if(!LoadPicture("menu/downmidl.bmp",pItemDown))return;
  625. if(!LoadPicture("menu/onmid.bmp",pItemOn))return;*/
  626. int     curItem=-1;
  627. int     oldItem=-1;
  628. RECT    rectItem[3];
  629.     for(int i=0;i<3;i++)
  630. {
  631. rectItem[i].left=90+i*215;
  632. rectItem[i].right=270+i*215;
  633. rectItem[i].top=510;
  634. rectItem[i].bottom=568;
  635. }
  636.     bool done=true;
  637.     m_bLBtnDown=m_bLBtnUp=false;
  638. ////////////////////////
  639. // ::ShowCursor(true);
  640. MSG msg;
  641.    while(done) // Loop That Runs While done=FALSE
  642. {
  643.  
  644. if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  645. {
  646. if (msg.message==WM_QUIT) // Have We Received A Quit Message?
  647. {
  648. done=false; // If So done=TRUE
  649. }
  650. else if(msg.message==WM_LBUTTONDOWN)
  651. {
  652. m_bLBtnDown=true;
  653. m_bLBtnUp=false;
  654. }
  655. else if(msg.message==WM_LBUTTONUP)
  656. {
  657. m_bLBtnDown=false;
  658. m_bLBtnUp=true;
  659. }
  660. else if(msg.message==WM_MOUSEMOVE)
  661. {
  662. m_bLBtnUp=false;
  663. }
  664. else // If Not, Deal With Window Messages
  665. {
  666. TranslateMessage(&msg); // Translate The Message
  667. DispatchMessage(&msg); // Dispatch The Message
  668. }
  669. }
  670. else // If There Are No Messages
  671. {   
  672.  
  673.                glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色
  674.                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  675.                glLoadIdentity();
  676.                DrawPicture(0,600,pMainMenu);
  677.     glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR);
  678. // glEnable(GL_BLEND);
  679.                GetCursorPos(&m_mpos);
  680.    curItem=-1;
  681.    for(int index=0;index<3;index++)
  682.    {
  683.    if(m_mpos.x>rectItem[index].left &&m_mpos.x<rectItem[index].right &&
  684.       m_mpos.y>rectItem[index].top && m_mpos.y<rectItem[index].bottom)
  685.    curItem=index;    
  686.    }
  687.    if(oldItem!=curItem)
  688.    {
  689.    if(curItem!=-1)cSelect.Play(0,1);
  690.        oldItem=curItem;
  691.    }
  692.    //////////////////////
  693.    if(curItem!=-1)
  694.    {
  695.    if(m_bLBtnDown)DrawPicture(90+curItem*215,568,pItemDown);
  696.    else DrawPicture(90+curItem*215,568,pItemOn);
  697.    if(m_bLBtnUp )
  698.    {
  699.    done=false;
  700.    cSelect.Play(1,1);
  701.    if(curItem==0)m_iCurMenu=0;
  702.    else
  703.    {
  704.   // if(curItem==1)
  705.   // {m_iCurMenu=9; }
  706.        //else m_iCurMenu=8;
  707.       
  708.    }
  709.    }
  710.    }
  711.    //////////text
  712. glDisable(GL_BLEND);
  713.    SwapBuffers(hDC);
  714. }
  715. }
  716. // Shutdown
  717.     DeletePicture(pMainMenu);
  718.     DeletePicture(pItemDown);
  719.     DeletePicture(pItemOn);
  720. }
  721. //////////////////////// DoAboutMenu  ////////////////////////
  722. void CMenu::DoAboutMenu(HDC hDC,bool IsAboutEngine)
  723. {
  724. AUX_RGBImageRec * pMainMenu=NULL;
  725. AUX_RGBImageRec * pItemDown=NULL;
  726. AUX_RGBImageRec * pItemOn=NULL;
  727. if(IsAboutEngine) pMainMenu=auxDIBImageLoad("menu/AboutEngine.bmp");
  728. else  pMainMenu=auxDIBImageLoad("menu/AboutMe.bmp");
  729. pItemDown=auxDIBImageLoad("menu/downmidle.bmp");
  730. pItemOn=auxDIBImageLoad("menu/onmidle.bmp");
  731. /*
  732. if(!LoadPicture("menu/singleplayer.bmp",pMainMenu))
  733. {
  734. MessageBox(NULL,"Load err.","ERROR",MB_OK|MB_ICONEXCLAMATION);
  735.         m_bExit=true;
  736. return;
  737. }
  738. if(!LoadPicture("menu/downmidl.bmp",pItemDown))return;
  739. if(!LoadPicture("menu/onmid.bmp",pItemOn))return;*/
  740. int     curItem=-1;
  741. int     oldItem=-1;
  742. RECT    rectItem[1];
  743.   rectItem[0].left=305; rectItem[0].right=485;
  744. rectItem[0].top=514; rectItem[0].bottom=572;
  745.     bool done=true;
  746.     m_bLBtnDown=m_bLBtnUp=false;
  747. ////////////////////////
  748. // ::ShowCursor(true);
  749. MSG msg;
  750.    while(done) // Loop That Runs While done=FALSE
  751. {
  752.  
  753. if (PeekMessage(&msg,NULL,0,0,PM_REMOVE)) // Is There A Message Waiting?
  754. {
  755. if (msg.message==WM_QUIT) // Have We Received A Quit Message?
  756. {
  757. done=false; // If So done=TRUE
  758. }
  759. else if(msg.message==WM_LBUTTONDOWN)
  760. {
  761. m_bLBtnDown=true;
  762. m_bLBtnUp=false;
  763. }
  764. else if(msg.message==WM_LBUTTONUP)
  765. {
  766. m_bLBtnDown=false;
  767. m_bLBtnUp=true;
  768. }
  769. else if(msg.message==WM_MOUSEMOVE)
  770. {
  771. m_bLBtnUp=false;
  772. }
  773. else // If Not, Deal With Window Messages
  774. {
  775. TranslateMessage(&msg); // Translate The Message
  776. DispatchMessage(&msg); // Dispatch The Message
  777. }
  778. }
  779. else // If There Are No Messages
  780. {   
  781.  
  782.                glClearColor(0.0f,0.0f,0.0f,1.0f);//设置背景颜色为黑色
  783.                glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
  784.                glLoadIdentity();
  785.                DrawPicture(0,600,pMainMenu);
  786.     glBlendFunc(GL_DST_COLOR,GL_ONE_MINUS_DST_COLOR);
  787. // glEnable(GL_BLEND);
  788.                GetCursorPos(&m_mpos);
  789.    curItem=-1;
  790.    for(int index=0;index<1;index++)
  791.    {
  792.    if(m_mpos.x>rectItem[index].left &&m_mpos.x<rectItem[index].right &&
  793.       m_mpos.y>rectItem[index].top && m_mpos.y<rectItem[index].bottom)
  794.    curItem=index;    
  795.    }
  796.    if(oldItem!=curItem)
  797.    {
  798.    if(curItem!=-1)cSelect.Play(0,1);
  799.        oldItem=curItem;
  800.    }
  801.    //////////////////////
  802.    if(curItem!=-1)
  803.    {
  804.    if(m_bLBtnDown)DrawPicture(305,572,pItemDown);
  805.    else DrawPicture(305,572,pItemOn);
  806.    if(m_bLBtnUp )
  807.    {
  808.    done=false;
  809.    cSelect.Play(1,1);
  810.    if(curItem==0)m_iCurMenu=0;
  811.    else
  812.    {
  813.   // if(curItem==1)
  814.   // {m_iCurMenu=9; }
  815.        //else m_iCurMenu=8;
  816.       
  817.    }
  818.    }
  819.    }
  820.    //////////text
  821. glDisable(GL_BLEND);
  822.    SwapBuffers(hDC);
  823. }
  824. }
  825. // Shutdown
  826.     DeletePicture(pMainMenu);
  827.     DeletePicture(pItemDown);
  828.     DeletePicture(pItemOn);
  829. }
  830. /////////////////////////////////////////////////
  831. void CMenu::DoExitMenu()
  832. {
  833. m_bExit=true;
  834. GameReturn=100;
  835. }
  836. /////////////////////////////////////////////////////////
  837. /////////////////////////////////////////////////////////
  838. void CMenu::DeletePicture(AUX_RGBImageRec *pData)
  839. {
  840. if (pData) { // If Texture Exists
  841. if (pData->data) delete pData->data; // If Texture Image Exists
  842. delete pData;
  843. }
  844. }
  845. bool CMenu::LoadPicture(char* filename,AUX_RGBImageRec *pData)
  846. {
  847.     pData=auxDIBImageLoad(filename);
  848.     if(!pData) return false;
  849.   return true;
  850. }
  851. void CMenu::DrawPicture(int xpos,int ypos,AUX_RGBImageRec *pData)
  852. {
  853. glRasterPos3i(xpos-400,300-ypos,-300);
  854.     glDrawPixels(pData->sizeX,pData->sizeY,GL_RGB,GL_UNSIGNED_BYTE,pData->data);
  855. }