コード例 #1
0
bool UGXPThemes::GetThemeString(LPCWSTR theme, int iPartId, int iStateId, int iPropId,  LPWSTR pszBuff, int cchMaxBuffChars)
{
	bool success = false;

	if (useThemes)
	{
		HANDLE themeHandle = OpenThemeData(NULL, theme);

		if (!themeHandle)
			return false;

		success = SUCCEEDED(GetThemeString(themeHandle, iPartId, iStateId, iPropId, pszBuff, cchMaxBuffChars));
	}

	return success;
}
コード例 #2
0
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;
}