// Welcom.cpp: implementation of the CWelcom class. // ////////////////////////////////////////////////////////////////////// #include "Welcom.h" //#include "Vfw.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// #define XOFFSET 50 #define YOFFSET -40 CWelcome::CWelcome(int ix,int iy,int iwidth,int iheight,int iLayerWidth,int iLayerHeight,UINT uiBG,CSideBar *_pMainSideBar,CContent *pContent,CButton *btHideShowPanel):CPanel(ix,iy,iwidth,iheight,uiBG) { iLayerX=0; iLayerY=0; CWelcome::iLayerWidth=iLayerWidth; CWelcome::iLayerHeight=iLayerHeight; CWelcome::_pMainSideBar=_pMainSideBar; CWelcome::pContent=pContent; CWelcome::btHideShowPanel=btHideShowPanel; for(int i=0;i<6;i++){ btnLinks[i]=new CButton(); btnLinks[i]->SetImage(IDB_MAIN_NORMAL); bUnderline[i]=false; } btnLinks[6]=new CButton(); btnLinks[6]->SetImage(IDB_BTN_EXIT_NORMAL); bUnderline[6]=false; btnLinks[0]->SetPlace(295+XOFFSET,130+YOFFSET,false); btnLinks[1]->SetPlace(255+XOFFSET,190+YOFFSET,false); btnLinks[2]->SetPlace(230+XOFFSET,250+YOFFSET,false); btnLinks[3]->SetPlace(220+XOFFSET,310+YOFFSET,false); btnLinks[4]->SetPlace(235+XOFFSET,370+YOFFSET,false); btnLinks[5]->SetPlace(270+XOFFSET,430+YOFFSET,false); btnLinks[6]->SetPlace(335+XOFFSET,480+YOFFSET,false); HDC hDC=GetDC(GameEngine::GetEngine()->GetWindow()); bmpBackGround=new Bitmap(hDC,IDB_TREE_BG,GameEngine::GetEngine()->GetInstance()); SetVideoClip(100,150,"Welcome.avi"); bPlayingMovie=true; bOnceMouseDown=false; ReleaseDC(GameEngine::GetEngine()->GetWindow(),hDC); //DeleteDC(hDC); } CWelcome::~CWelcome() { delete bmpBackGround; } void CWelcome::DrawScreen(HDC hDC){ if(!bShow) return; if(bPlayingMovie){ /*HBRUSH hWhiteBrush = CreateSolidBrush(RGB(255, 255, 255)); HBRUSH hBrush = (HBRUSH)SelectObject(_hOffscreenDC, hWhiteBrush); Rectangle(_hOffscreenDC,0,0,_pGame->GetWidth(),_pGame->GetHeight()); SelectObject(_hOffscreenDC,hBrush); DeleteObject(hWhiteBrush);*/ return; } else{ HDC _hLayerDC = CreateCompatibleDC(hDC); HBITMAP _hLayerBitmap = CreateCompatibleBitmap(hDC,iLayerWidth, iLayerHeight); SelectObject(_hLayerDC, _hLayerBitmap); //do painting for(int i=0;i<=iLayerWidth/90;i++){ for(int j=0;j<=iLayerHeight/90;j++){ bmpBackGround->Draw(_hLayerDC,i*90,j*90); } } for(int i = 0;i<7;i++){ btnLinks[i]->DrawScreen(_hLayerDC); } char szTitle[32]; strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"Organic Chemistry":"ldnksl ridhkh"); int iBackMode=SetBkMode(_hLayerDC,TRANSPARENT); HFONT fntRoman=CreateFont(60, 0, 0,0, FW_BOLD, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, GameEngine::GetEngine()->IsEnglish()?"Times New Roman":"DL-Paras."); HFONT fnt=(HFONT)SelectObject(_hLayerDC,fntRoman); TextOut(_hLayerDC,180,20,szTitle,strlen(szTitle)); SelectObject(_hLayerDC,fnt); DeleteObject(fntRoman); for(int i = 0;i<7;i++){ HFONT fntRoman2=CreateFont(30, 0, 0,0, FW_BOLD, TRUE, bUnderline[i], FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, GameEngine::GetEngine()->IsEnglish()?"Times New Roman":"DL-Paras."); SelectObject(_hLayerDC,fntRoman2); switch(i){ case 0: strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"Tutorial":"ksnkaOk"); TextOut(_hLayerDC,355+XOFFSET,140+YOFFSET,szTitle,strlen(szTitle)); break; case 1: strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"Revision":"mqkrSlaIK"); TextOut(_hLayerDC,315+XOFFSET,200+YOFFSET,szTitle,strlen(szTitle)); break; case 2: strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"Simulator":"wdo¾Ylh"); TextOut(_hLayerDC,290+XOFFSET,260+YOFFSET,szTitle,strlen(szTitle)); break; case 3: strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"Settings":"ieliSuŽ"); TextOut(_hLayerDC,280+XOFFSET,320+YOFFSET,szTitle,strlen(szTitle)); break; case 4: strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"Help":"iydh"); TextOut(_hLayerDC,295+XOFFSET,380+YOFFSET,szTitle,strlen(szTitle)); break; case 5: strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"About":"ks¾udKh"); TextOut(_hLayerDC,330+XOFFSET,440+YOFFSET,szTitle,strlen(szTitle)); break; case 6: strcpy(szTitle,GameEngine::GetEngine()->IsEnglish()?"Quit":"msgjSu"); TextOut(_hLayerDC,390+XOFFSET,480+YOFFSET,szTitle,strlen(szTitle)); break; } SelectObject(_hLayerDC,fnt); DeleteObject(fntRoman2); } SetBkMode(_hLayerDC,iBackMode); CPanel::DrawScreen(_hLayerDC); DeleteObject(_hLayerBitmap); DeleteDC(_hLayerDC); } } void CWelcome::ShowPanel(bool bShow){ if(bShow){ } CPanel::ShowPanel(bShow); } DWORD CWelcome::PlayMovie(WORD wDevID, DWORD dwFrom, DWORD dwTo) { MCI_DGV_PLAY_PARMS mciPlay; // play parameters DWORD dwFlags = 0; // Check dwFrom. If it is != 0 then set parameters and flags. if (dwFrom){ mciPlay.dwFrom = dwFrom; // set parameter dwFlags |= MCI_FROM; // set flag to validate member } // Check dwTo. If it is != 0 then set parameters and flags. if (dwTo){ mciPlay.dwTo = dwTo; // set parameter dwFlags |= MCI_TO; // set flag to validate member } // Send the MCI_PLAY command and return the result. return mciSendCommand(wDevID, MCI_PLAY, dwFlags, (DWORD)(LPVOID)&mciPlay); } void CWelcome::SetVideoClip(int xPos,int yPos,char *szFileName){ HWND hwndMain=GameEngine::GetEngine()->GetWindow(); HINSTANCE hInstance=GameEngine::GetEngine()->GetInstance(); hwndMovie = CreateWindow( "static", // predefined class "", // button text WS_VISIBLE | WS_CHILD, // styles // Size and position values are given explicitly, because // the CW_USEDEFAULT constant gives zero values for buttons. xPos, // starting x position yPos, // starting y position 550, // button width 259, // button height hwndMain, // parent window NULL, // No menu (HINSTANCE) GetWindowLong(hwndMain, GWL_HINSTANCE), NULL); // pointer not needed if (hwndMovie){ char szPath[64]; wsprintf(szPath,"VClips\\%s",szFileName); mciOpen.lpstrElementName = szPath; // Set the filename. mciOpen.dwStyle = WS_CHILD; // Set the style. mciOpen.hWndParent = GameEngine::GetEngine()->GetWindow(); if (mciSendCommand(0, MCI_OPEN, (DWORD)(MCI_OPEN_ELEMENT|MCI_DGV_OPEN_PARENT), (DWORD)(LPSTR)&mciOpen) == 0){ // Open operation is successful. Continue // Give a window handle. . MCI_DGV_WINDOW_PARMS mciWindow; mciWindow.hWnd = hwndMovie;//GameEngine::GetEngine()->GetWindow(); mciSendCommand(mciOpen.wDeviceID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD)(LPSTR)&mciWindow); PlayMovie(mciOpen.wDeviceID,5,0); } } //ShowWindow(hwndMovie, GameEngine::GetEngine()->GetiCmdShow()); //UpdateWindow(hwndMovie); } void CWelcome::MouseButtonDown(int x,int y,BOOL bLeft){ if(!bShow) return; LPMCI_GENERIC_PARMS lpClose; mciSendCommand(mciOpen.wDeviceID, MCI_STOP, MCI_TEST,NULL); //mciSendCommand(mciOpen.wDeviceID, MCI_CLOSE, MCI_WAIT,(DWORD) (LPMCI_GENERIC_PARMS) lpClose); mciSendCommand(MCI_ALL_DEVICE_ID, MCI_CLOSE, MCI_WAIT,NULL); //mciSendCommand(mciOpen.wDeviceID, MCI_CLOSE, MCI_WAIT,NULL); CloseWindow(hwndMovie); DestroyWindow(hwndMovie); //MessageBox(GameEngine::GetEngine()->GetWindow(),"asdjkf","sajkfsd",MB_OK); //btHideShowPanel->SetPlace(16,300-35,true); for(int i=0;i<7;i++){ btnLinks[i]->SetReady(true); btnLinks[i]->MouseButtonDown(x-GetX(),y-GetY(),bLeft); } HWND hWindow = GameEngine::GetEngine()->GetWindow(); HDC hDC = GetDC(hWindow); GamePaint(hDC); ReleaseDC(hWindow, hDC); bPlayingMovie=false; CPanel::MouseButtonDown(x,y,bLeft); } bool IsChanged=false; BOOL CALLBACK SetAboutProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: EndDialog(hwndDlg, wParam); return TRUE; } } return FALSE; } void ApplySettings(HWND hwndDlg){ char szName[128]; bool IsSoundOn,IsEnglish,IsSaveRecords,IsSaveStart; if (!GetDlgItemText(hwndDlg, IDC_EDIT_NAME, szName, 128)){ *szName=0; } IsSoundOn=((SendMessage(GetDlgItem(hwndDlg,IDC_RADIO_ON), BM_GETCHECK, 0,0)==BST_CHECKED)?true:false); IsEnglish=((SendMessage(GetDlgItem(hwndDlg,IDC_RADIO_EN), BM_GETCHECK, 0,0)==BST_CHECKED)?true:false); IsSaveRecords=((SendMessage(GetDlgItem(hwndDlg,IDC_CHECK_SAVE), BM_GETCHECK, 0,0)==BST_CHECKED)?true:false); IsSaveStart=((SendMessage(GetDlgItem(hwndDlg,IDC_CHECK_START), BM_GETCHECK, 0,0)==BST_CHECKED)?true:false); GameEngine::GetEngine()->SetValuesForSettings(IsEnglish,IsSoundOn,IsSaveRecords,IsSaveStart,szName); //MessageBox(GameEngine::GetEngine()->GetWindow(),"hi",szName,MB_OK); // Fall through. } BOOL CALLBACK SetSettingsProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_COMMAND: switch (LOWORD(wParam)) { case IDOK: ApplySettings(hwndDlg); case IDCANCEL: EndDialog(hwndDlg, wParam); return TRUE; case IDC_BUTTON_APPLY: ApplySettings(hwndDlg); } case WM_INITDIALOG: { if(!IsChanged){ SetDlgItemText(hwndDlg, IDC_EDIT_NAME, GameEngine::GetEngine()->GetStudentName()); HWND hwndEdit = GetDlgItem(hwndDlg, IDC_EDIT_NAME); SendMessage(hwndEdit,EM_SETSEL,0,strlen(GameEngine::GetEngine()->GetStudentName())); SendMessage(GetDlgItem(hwndDlg,IDC_RADIO_ON),BM_SETCHECK ,GameEngine::GetEngine()->IsSoundOn()? BST_CHECKED:BST_UNCHECKED,0); SendMessage(GetDlgItem(hwndDlg,IDC_RADIO_OFF),BM_SETCHECK, GameEngine::GetEngine()->IsSoundOn()? BST_UNCHECKED:BST_CHECKED,0); SendMessage(GetDlgItem(hwndDlg,IDC_RADIO_SIN),BM_SETCHECK ,GameEngine::GetEngine()->IsEnglish()? BST_UNCHECKED:BST_CHECKED,0); SendMessage(GetDlgItem(hwndDlg,IDC_RADIO_EN),BM_SETCHECK ,GameEngine::GetEngine()->IsEnglish()? BST_CHECKED:BST_UNCHECKED,0); SendMessage(GetDlgItem(hwndDlg,IDC_CHECK_START),BM_SETCHECK ,GameEngine::GetEngine()->IsSaveLastView()? BST_CHECKED:BST_UNCHECKED,0); SendMessage(GetDlgItem(hwndDlg,IDC_CHECK_SAVE),BM_SETCHECK ,GameEngine::GetEngine()->IsSaveRecords()? BST_CHECKED:BST_UNCHECKED,0); } IsChanged=true; return FALSE; } } return FALSE; } void CWelcome::MouseButtonUp(int x, int y, BOOL bLeft) { if(!bShow) return; if(bOnceMouseDown){ if(btnLinks[0]->MouseButtonDown(x-GetX(),y-GetY(),bLeft)){ ShowPanel(false); pContent->ShowPanel(true); btHideShowPanel->SetReady(true); if(GameEngine::GetEngine()->IsSaveLastView()){ pContent->ChangeTo(GameEngine::GetEngine()->GetLastLesson(),0,true); } else{ pContent->ChangeTo("intro",0,true); } _pMainSideBar->ShowPanel(true); _pMainSideBar->ChangeContent(GameEngine::GetEngine()->IsEnglish()?"LessonMenu.txt":"LessonMenu_sin.txt"); } if(btnLinks[1]->MouseButtonDown(x-GetX(),y-GetY(),bLeft)){ ShowPanel(false); pContent->ShowPanel(true); btHideShowPanel->SetReady(true); if(GameEngine::GetEngine()->IsSaveLastView()){ pContent->ChangeTo(GameEngine::GetEngine()->GetLastExercise(),0,true); } else pContent->ChangeTo("AlkaneRevision1",0,true); _pMainSideBar->ShowPanel(true); _pMainSideBar->ChangeContent(GameEngine::GetEngine()->IsEnglish()?"ExerciseMenu.txt":"ExerciseMenu_sin.txt"); } if(btnLinks[2]->MouseButtonDown(x-GetX(),y-GetY(),bLeft)){ HWND hWindow=GameEngine::GetEngine()->GetWindow(); CloseWindow(hWindow); WinExec("Simulator",SW_SHOWNORMAL); } if(btnLinks[3]->MouseButtonDown(x-GetX(),y-GetY(),bLeft)){ IsChanged=false; if ((int)DialogBox(GameEngine::GetEngine()->GetInstance(), MAKEINTRESOURCE(IDD_DIALOG_SETTINGS), GameEngine::GetEngine()->GetWindow(), (DLGPROC)SetSettingsProc)==IDOK){ } } if(btnLinks[4]->MouseButtonDown(x-GetX(),y-GetY(),bLeft)){ //WinExec("OrgHelp.chm",SW_SHOWNORMAL); ShellExecute(GameEngine::GetEngine()->GetWindow(), "open", "OrgHelp.chm", NULL, NULL, SW_SHOWNORMAL); } if(btnLinks[5]->MouseButtonDown(x-GetX(),y-GetY(),bLeft)){ if ((int)DialogBox(GameEngine::GetEngine()->GetInstance(), MAKEINTRESOURCE(IDD_DIALOG_ABOUT), GameEngine::GetEngine()->GetWindow(), (DLGPROC)SetAboutProc)==IDOK){ } } if(btnLinks[6]->MouseButtonDown(x-GetX(),y-GetY(),bLeft)){ //WinExec("OrgHelp.chm",SW_SHOWNORMAL); HWND hWindow=GameEngine::GetEngine()->GetWindow(); CloseWindow(hWindow); DestroyWindow(hWindow); //GameEnd(); PostQuitMessage(0); } } if(!bPlayingMovie) bOnceMouseDown=true; for(int i=0;i<7;i++){ btnLinks[i]->MouseButtonUp(x-GetX(),y-GetY(),bLeft); } } void CWelcome::MouseMove(int x, int y) { if(!bShow) return; for(int i=0;i<7;i++){ if(btnLinks[i]->MouseMove(x-GetX(),y-GetY())) bUnderline[i]=true; else bUnderline[i]=false; } }