// Answers.cpp: implementation of the CAnswers class. // ////////////////////////////////////////////////////////////////////// #include "Answers.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CAnswers::CAnswers(int ix,int iy,int iwidth,int iheight,int iLayerWidth,int iLayerHeight,UINT uiBG):CPanel(ix,iy,iwidth,iheight,uiBG) { iLayerX=0; iLayerY=0; CAnswers::iLayerWidth=iLayerWidth; CAnswers::iLayerHeight=iLayerHeight; HWND hwnd=GameEngine::GetEngine()->GetWindow(); HDC hDC=GetDC(hwnd); bmpBackGround=new Bitmap(hDC,IDB_TREE_BG,GameEngine::GetEngine()->GetInstance()); for(int i=0;i<16;i++){ pTglButton[i]=new CToggleButton(); } _hLayerBitmap = CreateCompatibleBitmap(hDC,iLayerWidth, iLayerHeight); _hOffDC = CreateCompatibleDC(hDC); hOldBitmap=(HBITMAP)SelectObject(_hOffDC,_hLayerBitmap); for(int i = 0;i<=iLayerWidth/90;i++){ for(int j=0;j<=iLayerHeight/90;j++){ bmpBackGround->Draw(_hOffDC,i*90,j*90); } } //Setting Moving DC _hMovingBitmap = CreateCompatibleBitmap(hDC,500, 300); bmpMovingBackGround=new Bitmap(hDC,500,300,RGB(221,221,221)); _hMovingDC = CreateCompatibleDC(hDC); SelectObject(_hMovingDC,_hMovingBitmap ); ReleaseDC(hwnd,hDC); bIsMoving=false; } CAnswers::~CAnswers() { SelectObject(_hOffDC,hOldBitmap); DeleteObject(_hLayerBitmap); delete(bmpBackGround); delete(bmpMovingBackGround); } void CAnswers::DrawScreen(HDC hDC){ if(!bShow) return; CPanel::DrawScreen(_hOffDC); for(int i=0;iDrawScreen(_hOffDC); } if(bIsMoving){ TransparentBlt(hDC, iMovingX-iDownOffSetX-iLayerX, iMovingY-iDownOffSetY-iLayerY, 500, 300, _hMovingDC, 0,0,500,300, RGB(221,221,221)); } } void CAnswers::SetAnswerList(char szNameOfOptions[16][64], int iNumberOfOptions,Bitmap **pElements){ //do painting for(int i=0;i<=iLayerWidth/90;i++){ for(int j=0;j<=iLayerHeight/90;j++){ bmpBackGround->Draw(_hOffDC,i*90,j*90); } } CAnswers::iNumberOfOptions=iNumberOfOptions; CAnswers::pElements=pElements; for(int i = 0;i<16;i++){ strcpy(CAnswers::szNameOfOptions[i],szNameOfOptions[i]); } int iDestination; int iCurY=20; for(int i = 0;iSetCmpd(szNameOfOptions[iDestination],5,iCurY,_hOffDC,pElements); iCurY+=pTglButton[i]->GetHeight()+5; } } void CAnswers::MouseButtonDown(int x, int y, BOOL bLeft){ bool bTemp=false; if(CPanel::MouseButtonDown(x,y,bLeft)) return; for(int i=0;iMouseButtonDown(x-GetX()+iLayerX,y-GetY()+iLayerY,bLeft)){ bTemp=true; iDownOffSetX=x-(pTglButton[i]->GetX()+GetX())-10; iDownOffSetY=y-(pTglButton[i]->GetY()+GetY())-10; iMovingX=x; iMovingY=y; /*for(int j=0;j<16;j++){ if(i==iSetNumber[j]){ iMovingElement=j; break; } }*/ iMovingElement=iSetNumber[i]; char szFile[64]; wsprintf(szFile,"Data\\CElements\\%s.txt",szNameOfOptions[iMovingElement]); SetElements(szFile,false); SetElements(szFile,true); break; } } bIsMoving=bTemp; } bool CAnswers::MouseButtonUp(int x, int y, BOOL bLeft){ bIsMoving=false; bool bJustReleased=false; for(int i=0;iMouseButtonUp(x-GetX()+iLayerX,y-GetY()+iLayerY,bLeft); if(pTglButton[i]->GetHold()){ /*for(int j=0;j<16;j++){ if(i==iSetNumber[j]){ iMovedElement=j; break; } }*/ iMovedElement=iSetNumber[i]; pTglButton[i]->SetHold(false); bJustReleased=true; break; } } CPanel::MouseButtonUp(x,y,bLeft); return bJustReleased; } void CAnswers::MouseMove(int x, int y){ if(bIsMoving){ iMovingX=x; iMovingY=y; } for(int i=0;iMouseMove(x-GetX()+iLayerX,y-GetY()+iLayerY)){ //iLayerX=pTglButton[i]->GetWidth()/2+5; } } CPanel::MouseMove(x,y); } void CAnswers::SetElements(char* szFileName,bool bOnlyElements){ if(!bOnlyElements) bmpMovingBackGround->Draw(_hMovingDC,0,0); HANDLE hFileC = CreateFile(TEXT(szFileName), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_READONLY, NULL); char chData; DWORD dwBytesRead; POINT ptSize; char szName[64]; while(true){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); if(chData==(char)179){ break; } ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); if(chData=='E'){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); //skip one //Read the Element int iElement[3]; char szNumber[8]; for(int i=0;i<3;i++){ int j=0; while(true){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); if(chData==':') break; else szNumber[j++]=chData; } szNumber[j]='\0'; iElement[i]=atoi(szNumber); } pElements[iElement[0]]->Draw(_hMovingDC,iElement[1],iElement[2],true); } else if(chData=='B'){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); //skip one //Read the Bond int iBonds[5]; char szNumber[8]; for(int i=0;i<5;i++){ int j=0; while(true){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); if(chData==':') break; else szNumber[j++]=chData; } szNumber[j]='\0'; iBonds[i]=atoi(szNumber); } if(!bOnlyElements){ POINT ptStartLn; POINT ptEndLn; ptStartLn.x=iBonds[1]; ptStartLn.y=iBonds[2]; ptEndLn.x=iBonds[3]; ptEndLn.y=iBonds[4]; DrawBond(_hMovingDC,iBonds[0],ptStartLn,ptEndLn); } } else if(chData=='S'){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); //skip one //Read the size int iSizes[2]; char szSize[8]; for(int i=0;i<2;i++){ int j=0; while(true){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); if(chData==':') break; else szSize[j++]=chData; } szSize[j]='\0'; iSizes[i]=atoi(szSize); } ptSize.x=iSizes[0]; ptSize.y=iSizes[1]; int j=0; while(true){ ReadFile(hFileC,&chData,1,&dwBytesRead,NULL); if(chData==':') break; else szName[j++]=chData; } szName[j]='\0'; } } CloseHandle(hFileC); } void CAnswers::DrawBond(HDC hDC,int iBondType,POINT ptStart,POINT ptEnd){ HPEN hGridPen = CreatePen(PS_SOLID, 1, RGB(255,0,0));//(255, 204, 153)); HPEN hPen = (HPEN)SelectObject(hDC, hGridPen); if(iBondType==1 || iBondType==4){ MoveToEx(hDC, ptStart.x,ptStart.y, NULL); LineTo(hDC, ptEnd.x,ptEnd.y); } else if(iBondType==2){ if(abs(ptStart.x-ptEnd.x)>abs(ptStart.y-ptEnd.y)){ MoveToEx(hDC,ptStart.x,ptStart.y+2,NULL); LineTo(hDC,ptEnd.x,ptEnd.y+2); MoveToEx(hDC,ptStart.x,ptStart.y-2,NULL); LineTo(hDC,ptEnd.x,ptEnd.y-2); } else{ MoveToEx(hDC,ptStart.x+2,ptStart.y,NULL); LineTo(hDC,ptEnd.x+2,ptEnd.y); MoveToEx(hDC,ptStart.x-2,ptStart.y,NULL); LineTo(hDC,ptEnd.x-2,ptEnd.y); } } else if(iBondType==3){ if(abs(ptStart.x-ptEnd.x)>abs(ptStart.y-ptEnd.y)){ MoveToEx(hDC, ptStart.x,ptStart.y-3, NULL); LineTo(hDC, ptEnd.x,ptEnd.y-3); MoveToEx(hDC, ptStart.x,ptStart.y, NULL); LineTo(hDC, ptEnd.x,ptEnd.y); MoveToEx(hDC, ptStart.x,ptStart.y+3, NULL); LineTo(hDC, ptEnd.x,ptEnd.y+3); } else{ MoveToEx(hDC, ptStart.x-3,ptStart.y, NULL); LineTo(hDC, ptEnd.x-3,ptEnd.y); MoveToEx(hDC, ptStart.x,ptStart.y, NULL); LineTo(hDC, ptEnd.x,ptEnd.y); MoveToEx(hDC, ptStart.x+3,ptStart.y, NULL); LineTo(hDC, ptEnd.x+3,ptEnd.y); } } SelectObject(hDC, hPen); DeleteObject(hGridPen); }