// Panel.cpp: implementation of the CPanel class. // ////////////////////////////////////////////////////////////////////// #include "Panel.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// #define BOR_WIDTH 5 #define BOR_HEIGHT 5 #define BMP_WIDTH 15 #define BMP_HEIGHT 50 CPanel::CPanel(int ix,int iy,int iwidth,int iheight,UINT uiBG) { CPanel::ix=ix; CPanel::iy=iy; CPanel::iwidth=iwidth; CPanel::iheight=iheight; CPanel::uiBG=uiBG; icurHeight=iheight; icurWidth=iwidth; HINSTANCE _hInstance=GameEngine::GetEngine()->GetInstance(); HWND _hWnd=GameEngine::GetEngine()->GetWindow(); HDC _hDC=GetDC(_hWnd); pBitmap[0]=new Bitmap(_hDC,IDB_SCROLL_VER_OUT,_hInstance); pBitmap[1]=new Bitmap(_hDC,IDB_SCROLL_VER_IN,_hInstance); pBitmap[2]=new Bitmap(_hDC,IDB_SCROLL_HOR_OUT,_hInstance); pBitmap[3]=new Bitmap(_hDC,IDB_SCROLL_HOR_IN,_hInstance); pBitmap[4]=new Bitmap(_hDC,IDB_SCROLL_VER_HIG,_hInstance); pBitmap[5]=new Bitmap(_hDC,IDB_SCROLL_HOR_HIG,_hInstance); pBGround[0]=new Bitmap(_hDC,uiBG,_hInstance); pBGround[1]=new Bitmap(_hDC,uiBG+1,_hInstance); pBGround[2]=new Bitmap(_hDC,uiBG+2,_hInstance); pBGround[3]=new Bitmap(_hDC,uiBG+3,_hInstance); pBGround[4]=new Bitmap(_hDC,uiBG+4,_hInstance); pBGround[5]=new Bitmap(_hDC,uiBG+5,_hInstance); pBGround[6]=new Bitmap(_hDC,uiBG+6,_hInstance); pBGround[7]=new Bitmap(_hDC,uiBG+7,_hInstance); iVerY=0; iHorX=0; iCurVerImage=0; iCurHorImage=2; bMoovingHor=false; bMoovingVer=false; bShow=false; //ReleaseDC(_hWnd,_hDC); } CPanel::~CPanel() { int i=0; for(;i<4;i++) delete pBitmap[i]; for(i=0;i<8;i++){ //delete pBGround[i]; } } void CPanel::DrawScreen(HDC hDC){ Bitmap *bmpEdges=new Bitmap(hDC,2,2,RGB(160,194,255)); bmpEdges->Draw(hDC,iLayerX,iLayerY); bmpEdges->Draw(hDC,iLayerX+iwidth-2,iLayerY); bmpEdges->Draw(hDC,iLayerX,iLayerY+iheight-2); //delete bmpEdges; //bmpEdges=new Bitmap(hDC,2,2,RGB(74,74,74)); bmpEdges->Draw(hDC,iLayerX+iwidth-1,iLayerY+iheight-.9); delete bmpEdges; HWND hWindow = GameEngine::GetEngine()->GetWindow(); HDC hRealDC = GameEngine::GetEngine()->getOffScreenDC(); pBGround[0]->Draw(hRealDC,ix-5,iy-5,true); pBGround[1]->Draw(hRealDC,ix+iwidth-10,iy-5,true); pBGround[2]->Draw(hRealDC,ix+iwidth-10,iy+iheight-10,true); pBGround[3]->Draw(hRealDC,ix-5,iy+iheight-10,true); int i =0; for(i=ix+10;i<=ix+iwidth-25;i++){ pBGround[4]->Draw(hRealDC,i,iy-5,false); } pBGround[4]->Draw(hRealDC,ix+iwidth-25,iy-5,false); for(i=iy+10;i<=iy+iheight-25;i++){ pBGround[7]->Draw(hRealDC,ix-5,i,false); } pBGround[7]->Draw(hRealDC,ix-5,iy+iheight-25,false); for(i=ix+10;i<=ix+iwidth-25;i++){ pBGround[6]->Draw(hRealDC,i,iy+iheight-10,false); } pBGround[6]->Draw(hRealDC,ix+iwidth-25,iy+iheight-10,false); for(i=iy+10;i<=iy+iheight-25;i++){ pBGround[5]->Draw(hRealDC,ix+iwidth-10,i,false); } pBGround[5]->Draw(hRealDC,ix+iwidth-10,iy+iheight-25,false); BitBlt(hRealDC, ix, iy, iwidth, iheight, hDC, iLayerX, iLayerY, SRCCOPY); //TextOut(hRealDC,20,20,"This is another test",15); //TransparentBlt(hRealDC, ix, iy, iwidth, iheight, //hDC, iLayerX, iLayerY,iwidth,iheight, RGB(255,0,255)); DrawInsidePanel(hRealDC); CheckScrolls(hRealDC); //ReleaseDC(hWindow, hRealDC); } void CPanel::CheckScrolls(HDC hDC){ icurHeight=iheight; icurWidth=iwidth; if(iLayerHeight>iheight){ HPEN hBackPen = CreatePen(PS_SOLID, 2, RGB(0,0,55));//(255, 204, 153)); HPEN hPen = (HPEN)SelectObject(hDC, hBackPen); //MoveToEx(hDC, iwidth-BMP_WIDTH/2+ix,iy+BMP_WIDTH/2,NULL); //LineTo(hDC, iwidth-BMP_WIDTH/2+ix, iheight-BMP_WIDTH/2+iy); HPEN hGridPen = CreatePen(PS_SOLID, 1, RGB(0,0,55));//(255, 204, 153)); SelectObject(hDC, hGridPen); DeleteObject(hBackPen); MoveToEx(hDC, iwidth-BMP_WIDTH/2+ix,iy,NULL); LineTo(hDC, iwidth-BMP_WIDTH/2+ix, iheight-BMP_WIDTH+iy); SelectObject(hDC,hPen); DeleteObject(hGridPen); if(iVerY<0) iVerY=0; else if(iVerY>iheight-BMP_WIDTH-BMP_HEIGHT){ iVerY=iheight-BMP_WIDTH-BMP_HEIGHT; } pBitmap[iCurVerImage]->Draw(hDC,iwidth-BMP_WIDTH-BOR_WIDTH+ix,iVerY-BOR_HEIGHT+iy,true); int iPos; if((iPos=iheight-BMP_WIDTH-BMP_HEIGHT)>0) iLayerY=iVerY*(iLayerHeight-iheight)/iPos; icurHeight-=10; } if(iLayerWidth>iwidth){ HPEN hBackPen = CreatePen(PS_SOLID, 2, RGB(0,0,0));//(255, 204, 153)); HPEN hPen = (HPEN)SelectObject(hDC, hBackPen); //MoveToEx(hDC, ix,iheight-BMP_WIDTH/2+iy,NULL); //LineTo(hDC, iwidth-BMP_WIDTH+ix, iheight-BMP_WIDTH/2+iy); HPEN hGridPen = CreatePen(PS_SOLID, 1, RGB(0,0,0));//(255, 204, 153)); SelectObject(hDC, hGridPen); DeleteObject(hBackPen); MoveToEx(hDC, ix,iheight-BMP_WIDTH/2+iy,NULL); LineTo(hDC, iwidth-BMP_WIDTH+ix, iheight-BMP_WIDTH/2+iy); SelectObject(hDC,hPen); DeleteObject(hGridPen); if(iHorX<0) iHorX=0; else if(iHorX>iwidth-BMP_WIDTH-BMP_HEIGHT){ iHorX=iwidth-BMP_WIDTH-BMP_HEIGHT; } pBitmap[iCurHorImage]->Draw(hDC,iHorX-BOR_HEIGHT+ix,iheight-BMP_WIDTH-BOR_WIDTH+iy,true); int iPos; if((iPos=iwidth-BMP_WIDTH-BMP_HEIGHT)>0) iLayerX=iHorX*(iLayerWidth-iwidth)/iPos; icurWidth-=10; } } bool CPanel::MouseButtonDown(int x, int y, BOOL bLeft){ if( (iLayerHeight>iheight) && (x>ix+iwidth-BMP_WIDTH && xiVerY+iy && yiheight) && (y>iy+iheight-BMP_WIDTH && yiHorX+ix && xiheight) && (x>ix+iwidth-BMP_WIDTH && xiVerY+iy && yiheight) && (y>iy+iheight-BMP_WIDTH && yiHorX+ix && x=0 && iVerY<=iheight-BMP_WIDTH-BMP_HEIGHT*/){ int iTempY; iTempY=ptImageAtHold.y+y-ptHold.y; //if(iTempY>=0 && iTempY<=iheight-BMP_WIDTH-BMP_HEIGHT){ iVerY=iTempY; //} } if(bMoovingHor && x<1000/*&& iHorX>=0 && iHorX<=iwidth-BMP_WIDTH-BMP_HEIGHT*/){ int iTempX; iTempX=ptImageAtHold.x+x-ptHold.x; //if(iTempX>=0 && iTempX<=iwidth-BMP_WIDTH-BMP_HEIGHT){ iHorX=iTempX; //} } } void CPanel::SetLayerY(int iLayerY){ int iPos=iheight-BMP_WIDTH-BMP_HEIGHT; if(iLayerHeight-icurHeight>0){ iVerY=(int)((float)iLayerY)*(iPos/(float)(iLayerHeight-iheight)); } char szText[64]; wsprintf(szText,"%d",iLayerY); //MessageBox(GameEngine::GetEngine()->GetWindow(),szText,"hi all",MB_OK); } void CPanel::SetX_Width(int ix,int iwidth){ CPanel::ix=ix; CPanel::iLayerWidth=iwidth; CPanel::iwidth=iwidth; } void CPanel::ShowPanel(bool bShow){ CPanel::bShow=bShow; } bool CPanel::IsMoving() { return bMoovingHor||bMoovingVer; }