Windows-classic-samples/Samples/IME/cpp/SampleIME/DisplayAttributeInfo.cpp
2025-11-28 00:35:46 +09:00

228 lines
6.0 KiB
C++

// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Copyright (c) Microsoft Corporation. All rights reserved
#include "Private.h"
#include "globals.h"
#include "DisplayAttributeInfo.h"
#include "TfInputProcessorProfile.h"
//+---------------------------------------------------------------------------
//
// The registry key and values
//
//----------------------------------------------------------------------------
// the registry values of the custmized display attributes
const WCHAR CDisplayAttributeInfoInput::_s_szValueName[] = L"DisplayAttributeInput";
const WCHAR CDisplayAttributeInfoConverted::_s_szValueName[] = L"DisplayAttributeConverted";
// The descriptions
const WCHAR CDisplayAttributeInfoInput::_s_szDescription[] = L"Sample IME Text Service Display Attribute Input";
const WCHAR CDisplayAttributeInfoConverted::_s_szDescription[] = L"Sample IME Text Service Display Attribute Converted";
//+---------------------------------------------------------------------------
//
// DisplayAttribute
//
//----------------------------------------------------------------------------
const TF_DISPLAYATTRIBUTE CDisplayAttributeInfoInput::_s_DisplayAttribute =
{
{ TF_CT_COLORREF, RGB(0, 103,206) }, // text color
{ TF_CT_NONE, 0 }, // background color (TF_CT_NONE => app default)
TF_LS_DOT, // underline style
FALSE, // underline boldness
{ TF_CT_COLORREF, RGB(0, 103,206) }, // underline color
TF_ATTR_INPUT // attribute info
};
const TF_DISPLAYATTRIBUTE CDisplayAttributeInfoConverted::_s_DisplayAttribute =
{
{ TF_CT_COLORREF, RGB(255, 255, 255) }, // text color
{ TF_CT_COLORREF, RGB( 0, 255, 255) }, // background color (TF_CT_NONE => app default)
TF_LS_NONE, // underline style
FALSE, // underline boldness
{ TF_CT_NONE, 0 }, // underline color
TF_ATTR_TARGET_CONVERTED // attribute info
};
//+---------------------------------------------------------------------------
//
// ctor
//
//----------------------------------------------------------------------------
CDisplayAttributeInfo::CDisplayAttributeInfo()
{
DllAddRef();
_pguid = nullptr;
_pDisplayAttribute = nullptr;
_pValueName = nullptr;
_refCount = 1;
}
//+---------------------------------------------------------------------------
//
// dtor
//
//----------------------------------------------------------------------------
CDisplayAttributeInfo::~CDisplayAttributeInfo()
{
DllRelease();
}
//+---------------------------------------------------------------------------
//
// QueryInterface
//
//----------------------------------------------------------------------------
STDAPI CDisplayAttributeInfo::QueryInterface(REFIID riid, _Outptr_ void **ppvObj)
{
if (ppvObj == nullptr)
return E_INVALIDARG;
*ppvObj = nullptr;
if (IsEqualIID(riid, IID_IUnknown) ||
IsEqualIID(riid, IID_ITfDisplayAttributeInfo))
{
*ppvObj = (ITfDisplayAttributeInfo *)this;
}
if (*ppvObj)
{
AddRef();
return S_OK;
}
return E_NOINTERFACE;
}
//+---------------------------------------------------------------------------
//
// AddRef
//
//----------------------------------------------------------------------------
ULONG CDisplayAttributeInfo::AddRef(void)
{
return ++_refCount;
}
//+---------------------------------------------------------------------------
//
// Release
//
//----------------------------------------------------------------------------
ULONG CDisplayAttributeInfo::Release(void)
{
LONG cr = --_refCount;
assert(_refCount >= 0);
if (_refCount == 0)
{
delete this;
}
return cr;
}
//+---------------------------------------------------------------------------
//
// ITfDisplayAttributeInfo::GetGUID
//
//----------------------------------------------------------------------------
STDAPI CDisplayAttributeInfo::GetGUID(_Out_ GUID *pguid)
{
if (pguid == nullptr)
return E_INVALIDARG;
if (_pguid == nullptr)
return E_FAIL;
*pguid = *_pguid;
return S_OK;
}
//+---------------------------------------------------------------------------
//
// ITfDisplayAttributeInfo::GetDescription
//
//----------------------------------------------------------------------------
STDAPI CDisplayAttributeInfo::GetDescription(_Out_ BSTR *pbstrDesc)
{
BSTR tempDesc;
if (pbstrDesc == nullptr)
{
return E_INVALIDARG;
}
*pbstrDesc = nullptr;
if ((tempDesc = SysAllocString(_pDescription)) == nullptr)
{
return E_OUTOFMEMORY;
}
*pbstrDesc = tempDesc;
return S_OK;
}
//+---------------------------------------------------------------------------
//
// ITfDisplayAttributeInfo::GetAttributeInfo
//
//----------------------------------------------------------------------------
STDAPI CDisplayAttributeInfo::GetAttributeInfo(_Out_ TF_DISPLAYATTRIBUTE *ptfDisplayAttr)
{
if (ptfDisplayAttr == nullptr)
{
return E_INVALIDARG;
}
// return the default display attribute.
*ptfDisplayAttr = *_pDisplayAttribute;
return S_OK;
}
//+---------------------------------------------------------------------------
//
// ITfDisplayAttributeInfo::SetAttributeInfo
//
//----------------------------------------------------------------------------
STDAPI CDisplayAttributeInfo::SetAttributeInfo(_In_ const TF_DISPLAYATTRIBUTE *ptfDisplayAttr)
{
ptfDisplayAttr;
return E_NOTIMPL;
}
//+---------------------------------------------------------------------------
//
// ITfDisplayAttributeInfo::Reset
//
//----------------------------------------------------------------------------
STDAPI CDisplayAttributeInfo::Reset()
{
return SetAttributeInfo(_pDisplayAttribute);
}