BOOL CXTPSkinManagerClass::GetThemePartSize(int iPartId, int iStateId, RECT *pRect, int eSize, SIZE* pSize) { if (GetThemeEnumValue(iPartId, iStateId, TMT_BGTYPE) != BT_IMAGEFILE) return FALSE; int nImageFile = (GetThemeEnumValue(iPartId, iStateId, TMT_IMAGESELECTTYPE) != IST_NONE) && (GetThemeEnumValue(iPartId, iStateId, TMT_GLYPHTYPE, GT_NONE) == GT_NONE) ? TMT_IMAGEFILE1: TMT_IMAGEFILE; CString strImageFile = GetThemeString(iPartId, iStateId, nImageFile); if (strImageFile.IsEmpty()) { if (nImageFile != TMT_IMAGEFILE1) return FALSE; strImageFile = GetThemeString(iPartId, iStateId, TMT_IMAGEFILE); if (strImageFile.IsEmpty()) return FALSE; } CXTPSkinImage* pImage = GetImages()->LoadFile(m_pSchema->GetResourceFile(), strImageFile); if (!pImage) { return FALSE; } int nImageCount = GetThemeInt(iPartId, iStateId, TMT_IMAGECOUNT, 1); if (nImageCount < 1) nImageCount = 1; BOOL bHorizontalImageLayout = GetThemeEnumValue(iPartId, iStateId, TMT_IMAGELAYOUT, IL_HORIZONTAL) == IL_HORIZONTAL; CSize sz(pImage->GetWidth(), pImage->GetHeight()); if (bHorizontalImageLayout) sz.cx /= nImageCount; else sz.cy /= nImageCount; if (eSize == TS_TRUE) { *pSize = sz; } if (eSize == TS_DRAW) { if (GetThemeEnumValue(iPartId, iStateId, TMT_SIZINGTYPE, ST_STRETCH) == ST_TRUESIZE) { *pSize = sz; return TRUE; } if (!pRect) { pSize->cy = 0; pSize->cx = 0; } else { pSize->cy = pRect->bottom - pRect->top; pSize->cx = pRect->right - pRect->left; } if (GetThemeBool(iPartId, iStateId, TMT_UNIFORMSIZING, FALSE)) { pSize->cx = MulDiv(pSize->cy, sz.cx, sz.cy); } } return TRUE; }
BOOL CXpTheme::GetThemeBool(int iPartId, int iStateId, int iPropId, BOOL bDefault) {_STT(); BOOL b = bDefault; if ( GetThemeBool( iPartId, iStateId, iPropId, &b ) ) return b; return b; }