CXTPSkinImage* CXTPSkinManagerResourceFile::LoadImage(CString strImageFile)
{
	CXTPSkinImage* pImage = NULL;

	if (m_pIniFile)
	{
		strImageFile = m_strResourcePath + _T('\\') + strImageFile;

		if (!FILEEXISTS_S(strImageFile))
			return NULL;

		pImage = new CXTPSkinImage();

		if (!pImage->LoadFile(strImageFile))
		{
			delete pImage;
			return NULL;
		}
	}
	else
	{
		strImageFile.Replace(_T('.'), _T('_'));
		strImageFile.Replace(_T('\\'), _T('_'));

		pImage = new CXTPSkinImage();

		if (!pImage->LoadFile(GetModuleHandle(), strImageFile))
		{
			delete pImage;
			return NULL;
		}
	}

	return pImage;
}
Пример #2
0
HBRUSH CXTPSkinObjectFrame::GetClientBrush(HDC hDC, HWND hWnd, UINT nCtlColor)
{
	if (m_dwDialogTexture != ETDT_ENABLETAB)
	{
		GrayCtlColor(hDC, hWnd, nCtlColor, GetMetrics()->m_brushDialog, GetColor(COLOR_BTNTEXT));
		return GetMetrics()->m_brushDialog;
	}

	if (GetMetrics()->m_brushTabControl == NULL)
	{
		CWindowDC dcWindow(this);

		CXTPSkinManagerClass* pClass = GetSkinManager()->GetSkinClass(this, _T("TAB"));

		CString strImageFile = pClass->GetThemeString(TABP_BODY, 0, TMT_STOCKIMAGEFILE);
		if (strImageFile.IsEmpty())
		{
			return GetMetrics()->m_brushDialog;
		}

		CXTPSkinImage* pImage = pClass->GetImages()->LoadFile(m_pManager->GetResourceFile(), strImageFile);

		if (!pImage)
		{
			return GetMetrics()->m_brushDialog;
		}

		CRect rc(0, 0, pImage->GetWidth(), pImage->GetHeight());

		CBitmap bmp;
		bmp.CreateCompatibleBitmap(&dcWindow, rc.Width(), rc.Height());

		CXTPCompatibleDC dc(&dcWindow, bmp);

		pImage->DrawImage(&dc, rc, rc, CRect(0, 0, 0, 0), COLORREF_NULL, ST_TRUESIZE, FALSE);

		GetMetrics()->m_brushTabControl = ::CreatePatternBrush(bmp);
	}


	if (hWnd != m_hWnd)
	{
		CXTPWindowRect rcPaint(hWnd);
		CXTPWindowRect rcBrush(m_hWnd);
		::SetBrushOrgEx(hDC, rcBrush.left - rcPaint.left, rcBrush.top - rcPaint.top, NULL);

		::SetBkMode(hDC, TRANSPARENT);
		::SetTextColor(hDC, GetColor(COLOR_BTNTEXT));
	}

	return GetMetrics()->m_brushTabControl;

}
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;
}