You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
342 lines
7.9 KiB
342 lines
7.9 KiB
//
|
|
// cicbtn.cpp
|
|
//
|
|
// base code: nuibase sample
|
|
//
|
|
|
|
#include "private.h"
|
|
#include "globals.h"
|
|
#include "cicbtn.h"
|
|
#include "helpers.h"
|
|
|
|
#define CICBTN_ITEMSINK_COOKIE 0x80000003
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CCicButton
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// dtor
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
CCicButton::~CCicButton()
|
|
{
|
|
SafeRelease(m_plbiSink);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// InitInfo
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
void CCicButton::InitInfo(REFCLSID rclsid,
|
|
REFGUID rguid,
|
|
DWORD dwStyle,
|
|
ULONG ulSort,
|
|
LPWSTR pszDesc)
|
|
{
|
|
// init nuiInfo.
|
|
m_lbiInfo.clsidService = rclsid;
|
|
m_lbiInfo.guidItem = rguid;
|
|
m_lbiInfo.dwStyle = dwStyle;
|
|
m_lbiInfo.ulSort = ulSort;
|
|
StringCchCopyW(m_lbiInfo.szDescription, ARRAYSIZE(m_lbiInfo.szDescription), pszDesc);
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// GetType
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::GetInfo(TF_LANGBARITEMINFO *pInfo)
|
|
{
|
|
*pInfo = m_lbiInfo;
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// GetStatus
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::GetStatus(DWORD *pdwStatus)
|
|
{
|
|
*pdwStatus = m_dwStatus;
|
|
|
|
if (m_fEnable) // enable?
|
|
{
|
|
// do nothing
|
|
}
|
|
else
|
|
*pdwStatus |= TF_LBI_STATUS_DISABLED;
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Show
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::Show(BOOL fShow)
|
|
{
|
|
ITfLangBarItemSink* pSink;
|
|
|
|
ShowInternal(fShow);
|
|
pSink = GetSink();
|
|
if (pSink)
|
|
pSink->OnUpdate(TF_LBI_STATUS);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// AdviseSink
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
HRESULT CCicButton::AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if (IsEqualIID(IID_ITfLangBarItemSink, riid))
|
|
{
|
|
if (m_plbiSink)
|
|
hr = CONNECT_E_CANNOTCONNECT;
|
|
else
|
|
{
|
|
hr = punk->QueryInterface(IID_ITfLangBarItemSink, (void **)&m_plbiSink);
|
|
if (SUCCEEDED(hr))
|
|
*pdwCookie = CICBTN_ITEMSINK_COOKIE;
|
|
}
|
|
}
|
|
else
|
|
hr = CONNECT_E_CANNOTCONNECT;
|
|
|
|
return hr;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// UnadviseSink
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
HRESULT CCicButton::UnadviseSink(DWORD dwCookie)
|
|
{
|
|
if (CICBTN_ITEMSINK_COOKIE != dwCookie)
|
|
return E_FAIL;
|
|
|
|
if (!m_plbiSink)
|
|
return E_UNEXPECTED;
|
|
|
|
m_plbiSink->Release();
|
|
m_plbiSink = NULL;
|
|
return S_OK;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// Show
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
HRESULT CCicButton::ShowInternal(BOOL fShow, BOOL fNotify)
|
|
{
|
|
m_fShown = fShow;
|
|
DWORD dwOldStatus = m_dwStatus;
|
|
|
|
if (fShow)
|
|
m_dwStatus &= ~TF_LBI_STATUS_HIDDEN;
|
|
else
|
|
m_dwStatus |= TF_LBI_STATUS_HIDDEN;
|
|
|
|
if (fNotify && (dwOldStatus != m_dwStatus) && m_plbiSink)
|
|
m_plbiSink->OnUpdate(TF_LBI_STATUS);
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// CLBarItemButtonBase
|
|
//
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// IUnknown
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::QueryInterface(REFIID riid, void **ppvObj)
|
|
{
|
|
*ppvObj = NULL;
|
|
|
|
if (IsEqualIID(riid, IID_IUnknown) ||
|
|
IsEqualIID(riid, IID_ITfLangBarItem))
|
|
{
|
|
*ppvObj = SAFECAST(this, ITfLangBarItem *);
|
|
}
|
|
else if (IsEqualIID(riid, IID_ITfLangBarItemButton))
|
|
{
|
|
*ppvObj = SAFECAST(this, ITfLangBarItemButton *);
|
|
}
|
|
else if (IsEqualIID(riid, IID_ITfSource))
|
|
{
|
|
*ppvObj = SAFECAST(this, ITfSource *);
|
|
}
|
|
|
|
if (*ppvObj)
|
|
{
|
|
AddRef();
|
|
return S_OK;
|
|
}
|
|
|
|
return E_NOINTERFACE;
|
|
}
|
|
|
|
STDAPI_(ULONG) CCicButton::AddRef()
|
|
{
|
|
return ++m_cRef;
|
|
}
|
|
|
|
#ifdef NEVER // each button object has this
|
|
STDAPI_(ULONG) CCicButton::Release()
|
|
{
|
|
long cr;
|
|
|
|
cr = --m_cRef;
|
|
Assert(cr >= 0);
|
|
|
|
if (cr == 0)
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
return cr;
|
|
}
|
|
#endif // NEVER
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// OnClick
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::OnClick(TfLBIClick click, POINT pt, const RECT *prcArea)
|
|
{
|
|
switch (click)
|
|
{
|
|
case TF_LBI_CLK_RIGHT:
|
|
return OnRButtonUp(pt, prcArea);
|
|
case TF_LBI_CLK_LEFT:
|
|
return OnLButtonUp(pt, prcArea);
|
|
}
|
|
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// OnLButtonUp
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
HRESULT CCicButton::OnLButtonUp(const POINT pt, const RECT *prcArea)
|
|
{
|
|
pt, prcArea; // no ref
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// OnRButtonUp
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
HRESULT CCicButton::OnRButtonUp(const POINT pt, const RECT *prcArea)
|
|
{
|
|
pt, prcArea; // no ref
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// InitMenu
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::InitMenu(ITfMenu *pMenu)
|
|
{
|
|
pMenu; // no ref
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// OnMenuSelect
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::OnMenuSelect(UINT uID)
|
|
{
|
|
uID; // no ref
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// GetIcon
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::GetIcon(HICON *phIcon)
|
|
{
|
|
phIcon; // no ref
|
|
return E_NOTIMPL;
|
|
}
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// GetText
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::GetText(BSTR *pbstrText)
|
|
{
|
|
if (!pbstrText)
|
|
return E_INVALIDARG;
|
|
|
|
*pbstrText = SysAllocString(m_szText);
|
|
return S_OK;
|
|
}
|
|
|
|
|
|
//+---------------------------------------------------------------------------
|
|
//
|
|
// GetTooltipString
|
|
//
|
|
//----------------------------------------------------------------------------
|
|
|
|
STDAPI CCicButton::GetTooltipString(BSTR *pbstrToolTip)
|
|
{
|
|
if (!pbstrToolTip)
|
|
return E_INVALIDARG;
|
|
|
|
*pbstrToolTip = SysAllocString(m_szToolTip);
|
|
return S_OK;
|
|
}
|