windows-nt/Source/XPSP1/NT/shell/ext/mlang/attrloc.cpp
2020-09-26 16:20:57 +08:00

99 lines
2.2 KiB
C++

// AttrLoc.cpp : Implementation of CMLStrAttrLocale
#include "private.h"
#ifdef NEWMLSTR
#include "attrloc.h"
/////////////////////////////////////////////////////////////////////////////
// CMLStrAttrLocale
CMLStrAttrLocale::CMLStrAttrLocale() :
m_lLen(0),
m_lcid(0)
{
}
STDMETHODIMP CMLStrAttrLocale::SetClient(IUnknown* pUnk)
{
return E_NOTIMPL; // CMLStrAttrLocale::SetClient()
}
STDMETHODIMP CMLStrAttrLocale::GetClient(IUnknown** ppUnk)
{
return E_NOTIMPL; // CMLStrAttrLocale::GetClient()
}
STDMETHODIMP CMLStrAttrLocale::QueryAttr(REFIID riid, LPARAM lParam, IUnknown** ppUnk, long* lConf)
{
return E_NOTIMPL; // CMLStrAttrLocale::QueryAttr()
}
STDMETHODIMP CMLStrAttrLocale::GetAttrInterface(IID* pIID, LPARAM* plParam)
{
return E_NOTIMPL; // CMLStrAttrLocale::GetAttrInterface()
}
STDMETHODIMP CMLStrAttrLocale::SetMLStr(long lDestPos, long lDestLen, IUnknown* pSrcMLStr, long lSrcPos, long lSrcLen)
{
if (pSrcMLStr)
{
return E_NOTIMPL; // CMLStrAttrLocale::SetMLStr()
}
else
{
HRESULT hr = ::RegularizePosLen(m_lLen, &lDestPos, &lDestLen);
m_lLen -= lDestLen;
m_lLen += lSrcLen; // Insert default
return S_OK;
}
}
STDMETHODIMP CMLStrAttrLocale::SetLong(long lDestPos, long lDestLen, long lValue)
{
ASSERT_THIS;
HRESULT hr = ::RegularizePosLen(m_lLen, &lDestPos, &lDestLen);
if (SUCCEEDED(hr) && lDestPos == 0)
m_lcid = (LCID)lValue; // In this version, saves only first locale.
return hr;
}
STDMETHODIMP CMLStrAttrLocale::GetLong(long lSrcPos, long lSrcLen, long* plValue, long* plActualPos, long* plActualLen)
{
ASSERT_THIS;
ASSERT_WRITE_PTR_OR_NULL(plValue);
ASSERT_WRITE_PTR_OR_NULL(plActualPos);
ASSERT_WRITE_PTR_OR_NULL(plActualLen);
HRESULT hr = ::RegularizePosLen(m_lLen, &lSrcPos, &lSrcLen);
if (SUCCEEDED(hr))
{
if (plValue)
*plValue = (long)m_lcid;
if (plActualPos)
*plActualPos = lSrcPos;
if (plActualLen)
*plActualLen = lSrcLen;
}
else
{
if (plValue)
*plValue = 0;
if (plActualPos)
*plActualPos = 0;
if (plActualLen)
*plActualLen = 0;
}
return hr;
}
#endif // NEWMLSTR