#include "StdAfx.h" #include "T2BitImage.h" #include "T2DlgItemVScr.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif T2DlgItemVScr::T2DlgItemVScr(T2TowerDoc* towerDoc, T2ImageObj* imageObj, CPalette* palette) : T2DlgItemScr(towerDoc, imageObj, palette) { } /*virtual*/ BOOL T2DlgItemVScr::OnT2DlgItemEraseBkgnd(CDC* dc) { #pragma var_order(imgRect, thumbSize, brush, rect, image, destRect, pen1, pen2, savedDC, pen3, thumbPosition) CRect rect; GetClientRect(rect); int savedDC = dc->SaveDC(); dc->SelectPalette(mPalette, false); dc->RealizePalette(); CPen pen1; pen1.CreatePen(PS_SOLID, 0, PALETTERGB(255, 255, 255)); CPen pen2; pen2.CreatePen(PS_SOLID, 0, PALETTERGB(133, 133, 133)); CPen pen3; pen3.CreatePen(PS_SOLID, 0, PALETTEINDEX(255)); CBrush brush; brush.CreateSolidBrush(PALETTERGB(204, 204, 204)); dc->SelectObject(pen2); dc->MoveTo(rect.right - 1, rect.top); dc->LineTo(rect.left, rect.top); dc->LineTo(rect.left, rect.bottom); dc->SelectObject(pen1); dc->MoveTo(rect.right - 1, rect.top + 1); dc->LineTo(rect.right - 1, rect.bottom - 1); dc->LineTo(rect.left, rect.bottom - 1); int thumbPosition, thumbSize; CalcScrollBarThumb(&thumbPosition, &thumbSize); RECT imgRect; T2BitImage *image = GetObjectImage( imgRect, "DLGITEM:UArrow", !IsScrollable() ? 200 : (mUpImage == 100) ? 100 : 0 ); RECT destRect = rect; destRect.top = 0; destRect.bottom = imgRect.bottom - imgRect.top; dc->Rectangle(&destRect); image->CopyImage(dc, imgRect, destRect, 0, NULL); image = GetObjectImage( imgRect, "DLGITEM:DArrow", !IsScrollable() ? 200 : (mDownImage == 100) ? 100 : 0 ); destRect = rect; destRect.top = destRect.bottom - (imgRect.bottom - imgRect.top); dc->Rectangle(&destRect); image->CopyImage(dc, imgRect, destRect, 0, NULL); destRect.left = rect.left + 1; destRect.top = 16; destRect.right = rect.right - 1; destRect.bottom = thumbPosition; if (destRect.top < destRect.bottom) dc->FillRect(&destRect, &brush); destRect.left = rect.left + 1; destRect.top = thumbPosition + thumbSize; destRect.right = rect.right - 1; destRect.bottom = rect.bottom - 16; if (destRect.top < destRect.bottom) dc->FillRect(&destRect, &brush); if (thumbSize > 0) { destRect.left = rect.left + 1; destRect.top = thumbPosition; destRect.right = rect.right - 1; destRect.bottom = thumbPosition + thumbSize; dc->FillRect(&destRect, &brush); dc->SelectObject(pen3); dc->MoveTo(destRect.right - 1, destRect.top); dc->LineTo(destRect.right - 1, destRect.bottom - 1); dc->LineTo(destRect.left, destRect.bottom - 1); dc->LineTo(destRect.left, destRect.top); dc->LineTo(destRect.right - 1, destRect.top); dc->SelectObject(pen2); dc->MoveTo(destRect.right - 2, destRect.top + 1); dc->LineTo(destRect.right - 2, destRect.bottom - 2); dc->LineTo(destRect.left + 1, destRect.bottom - 2); dc->SelectObject(pen1); dc->MoveTo(destRect.right - 2, destRect.top + 1); dc->LineTo(destRect.left + 1, destRect.top + 1); dc->LineTo(destRect.left + 1, destRect.bottom - 1); } dc->RestoreDC(savedDC); return true; } /*virtual*/ int T2DlgItemVScr::ScrollBarHittest(CPoint pt) const { if (!IsScrollable()) return 0; CRect theCRect; GetClientRect(theCRect); int area = 0; int theThumbPosition, theThumbSize; CalcScrollBarThumb(&theThumbPosition, &theThumbSize); if (theCRect.top <= pt.y && pt.y < (theCRect.top + 16)) area = Area_Up; else if ((theCRect.top + 16) <= pt.y && pt.y < theThumbPosition) area = Area_PageUp; else if (theThumbPosition <= pt.y && pt.y < (theThumbPosition + theThumbSize)) area = Area_Thumb; else if ((theThumbPosition + theThumbSize) <= pt.y && pt.y < (theCRect.bottom - 16)) area = Area_PageDown; else if ((theCRect.bottom - 16) <= pt.y && pt.y < theCRect.bottom) area = Area_Down; return area; } /*virtual*/ void T2DlgItemVScr::GetUpButtonRect(const CRect& clientRect, CRect& buttonRect) const { buttonRect = CRect(clientRect.left, clientRect.top, clientRect.right, clientRect.top + 16); } /*virtual*/ void T2DlgItemVScr::GetDnButtonRect(const CRect& clientRect, CRect& buttonRect) const { buttonRect = CRect(clientRect.left, clientRect.bottom - 16, clientRect.right, clientRect.bottom); } /*virtual*/ int T2DlgItemVScr::PositionToValue(const CPoint& pt) const { return pt.y; } /*virtual*/ int T2DlgItemVScr::PositionToValue(const CRect& rect) const { return rect.Height(); }