You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
4.7 KiB
C++
180 lines
4.7 KiB
C++
// XTPTaskDialogAPI.cpp
|
|
//
|
|
// This file is a part of the XTREME CONTROLS MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "Common/XTPDrawHelpers.h"
|
|
|
|
#include "Common/XTPMarkupRender.h"
|
|
|
|
#include "XTPTaskDialogAPI.h"
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
namespace XTPTaskDialogAPI
|
|
{
|
|
_XTP_EXT_CLASS int AFXAPI XTPLoadStringInst(HINSTANCE hInstance, UINT nID, CString* pString)
|
|
{
|
|
#ifdef _UNICODE
|
|
const int nChar = 1; // one TCHAR unused is good enough
|
|
#else
|
|
const int nChar = 2; // two BYTES unused for case of DBC last char
|
|
#endif
|
|
const int nMax = 256;
|
|
|
|
TCHAR szBuffer[nMax];
|
|
int nLen = ::LoadString(hInstance, nID, szBuffer, (nMax-1));
|
|
if ((nMax-1) - nLen > nChar)
|
|
{
|
|
*pString = nLen > 0 ? szBuffer : _T("");
|
|
return nLen;
|
|
}
|
|
|
|
int nSize = nMax;
|
|
do
|
|
{
|
|
nSize += nMax;
|
|
nLen = ::LoadString(hInstance, nID, pString->GetBuffer(nSize - 1), nSize);
|
|
}
|
|
while (nSize - nLen <= nChar);
|
|
pString->ReleaseBuffer();
|
|
|
|
return nLen;
|
|
}
|
|
|
|
_XTP_EXT_CLASS CPoint AFXAPI XTPDlu2Pix(int dluX, int dluY)
|
|
{
|
|
CPoint baseXY(::GetDialogBaseUnits());
|
|
CPoint pixXY(0,0);
|
|
pixXY.x = ::MulDiv(dluX, baseXY.x, 4);
|
|
pixXY.y = ::MulDiv(dluY, baseXY.y, 8);
|
|
return pixXY;
|
|
}
|
|
|
|
_XTP_EXT_CLASS CPoint AFXAPI XTPPix2Dlu(int pixX, int pixY)
|
|
{
|
|
CPoint baseXY(::GetDialogBaseUnits());
|
|
CPoint dluXY;
|
|
dluXY.x = ::MulDiv(pixX, 4, baseXY.x);
|
|
dluXY.y = ::MulDiv(pixY, 8, baseXY.y);
|
|
return dluXY;
|
|
}
|
|
|
|
_XTP_EXT_CLASS BOOL AFXAPI XTPCalcTextSize(const CString& strText, CSize& sizeText, CFont& font, BOOL* pbWordWrap /*=NULL*/)
|
|
{
|
|
if (strText.IsEmpty() || font.m_hObject == NULL)
|
|
{
|
|
sizeText = CSize(0,0);
|
|
return FALSE;
|
|
}
|
|
|
|
CWindowDC dc( NULL );
|
|
CXTPFontDC fontDC( &dc, &font );
|
|
|
|
CRect rectText = XTPSize2Rect(sizeText);
|
|
if (dc.DrawText(strText, &rectText,
|
|
DT_CALCRECT | DT_LEFT | DT_NOPREFIX | DT_TOP | DT_WORDBREAK) != 0)
|
|
{
|
|
sizeText = rectText.Size();
|
|
|
|
if (pbWordWrap)
|
|
*pbWordWrap = (sizeText.cy > dc.GetTextExtent(strText).cy);
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
sizeText = CSize(0,0);
|
|
return FALSE;
|
|
}
|
|
|
|
_XTP_EXT_CLASS BOOL AFXAPI XTPCalcIdealTextSize(const CString& strText, CSize& sizeText, CFont& font, int dluMax /*=xtpDluMax*/, int dluGrow /*=xtpDluAdd*/)
|
|
{
|
|
if ( strText.IsEmpty() || font.m_hObject == NULL )
|
|
return FALSE;
|
|
|
|
CWindowDC dc( NULL );
|
|
CXTPFontDC fontDC( &dc, &font );
|
|
CSize sizeExtent = dc.GetTextExtent( strText );
|
|
|
|
int nMaxPix = XTPDlu2Pix( dluMax, 0 ).x;
|
|
if (sizeExtent.cx > nMaxPix)
|
|
{
|
|
sizeText.cx += MulDiv( sizeExtent.cx, XTPDlu2Pix( dluGrow, 0 ).x, nMaxPix);
|
|
return XTPCalcTextSize( strText, sizeText, font );
|
|
}
|
|
else if (sizeExtent.cx > sizeText.cx)
|
|
{
|
|
CSize sizeMin = sizeText;
|
|
XTPCalcTextSize(strText, sizeText, font);
|
|
|
|
if (sizeText.cx > sizeMin.cx)
|
|
{
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
sizeText = sizeExtent;
|
|
return FALSE;
|
|
}
|
|
|
|
_XTP_EXT_CLASS BOOL AFXAPI XTPCalcIdealTextSize(CXTPMarkupContext* pMarkupContext, CXTPMarkupUIElement* pUIElement, CSize& sizeText, CFont& font, int dluMax /*=xtpDluMax*/, int dluGrow /*=xtpDluAdd*/)
|
|
{
|
|
XTPMarkupSetDefaultFont(pMarkupContext, (HFONT)font.GetSafeHandle(), (COLORREF)-1);
|
|
|
|
CSize sizeExtent = XTPMarkupMeasureElement(pUIElement, INT_MAX, INT_MAX);
|
|
CSize sizeMax = sizeExtent;
|
|
|
|
int nMaxPix = XTPDlu2Pix( dluMax, 0 ).x;
|
|
if (sizeExtent.cx > nMaxPix)
|
|
{
|
|
sizeText.cx += MulDiv( sizeExtent.cx, XTPDlu2Pix( dluGrow, 0 ).x, nMaxPix);
|
|
}
|
|
|
|
sizeExtent = XTPMarkupMeasureElement(pUIElement, sizeText.cx, INT_MAX);
|
|
|
|
if (sizeExtent.cx == sizeText.cx && sizeExtent.cy == sizeMax.cy && sizeExtent.cx < sizeMax.cx)
|
|
sizeExtent = sizeMax;
|
|
|
|
sizeText = sizeExtent;
|
|
return TRUE;
|
|
}
|
|
|
|
_XTP_EXT_CLASS CString AFXAPI XTPExtractSubString(CString strFullString, int iSubString)
|
|
{
|
|
if (strFullString.Find(_T('\n')) != -1)
|
|
{
|
|
CString strSubString;
|
|
AfxExtractSubString(strSubString, strFullString, iSubString, _T('\n'));
|
|
return strSubString;
|
|
}
|
|
return ((iSubString == 0)? strFullString: _T(""));
|
|
}
|
|
|
|
_XTP_EXT_CLASS CRect AFXAPI XTPSize2Rect(CSize size)
|
|
{
|
|
return CRect(CPoint(0, 0), size);
|
|
}
|
|
}
|