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.
152 lines
3.8 KiB
152 lines
3.8 KiB
//
|
|
// cicbtn.h
|
|
//
|
|
|
|
#ifndef _CICBTN_H_
|
|
#define _CICBTN_H_
|
|
|
|
#include "msctf.h"
|
|
#include <initguid.h>
|
|
#include "..\CiceroLib\inc\slbarid.h"
|
|
|
|
#define CICBTN_TOOLTIP_MAX 256
|
|
#define CICBTN_TEXT_MAX 256
|
|
|
|
class __declspec(novtable) CCicButton : public ITfSource, public ITfLangBarItemButton
|
|
{
|
|
public:
|
|
CCicButton()
|
|
{
|
|
m_uid = (UINT)-1;
|
|
m_dwStatus = 0;
|
|
m_fShown = FALSE;
|
|
m_fEnable = TRUE;
|
|
m_szText[0] = L'\0';
|
|
m_plbiSink = NULL;
|
|
m_cRef = 1;
|
|
}
|
|
~CCicButton();
|
|
|
|
//
|
|
// IUnknown methods
|
|
//
|
|
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
|
|
STDMETHODIMP_(ULONG) AddRef(void);
|
|
//virtual STDMETHODIMP_(ULONG) Release(void);
|
|
|
|
void InitInfo(REFCLSID clsid, REFGUID rguid, DWORD dwStyle, ULONG ulSort, LPWSTR pszDesc);
|
|
virtual STDMETHODIMP GetInfo(TF_LANGBARITEMINFO *pInfo);
|
|
virtual STDMETHODIMP GetStatus(DWORD *pdwStatus);
|
|
virtual STDMETHODIMP Show(BOOL fShow);
|
|
virtual STDMETHODIMP GetTooltipString(BSTR *pbstrToolTip);
|
|
virtual STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
|
|
virtual STDMETHODIMP UnadviseSink(DWORD dwCookie);
|
|
virtual STDMETHODIMP OnClick( /* [in] */ TfLBIClick click, /* [in] */ POINT pt, /* [in] */ const RECT __RPC_FAR *prcArea);
|
|
virtual STDMETHODIMP InitMenu( /* [in] */ ITfMenu __RPC_FAR *pMenu);
|
|
virtual STDMETHODIMP OnMenuSelect( /* [in] */ UINT wID);
|
|
virtual STDMETHODIMP GetIcon( /* [out] */ HICON __RPC_FAR *phIcon);
|
|
virtual STDMETHODIMP GetText( /* [out] */ BSTR __RPC_FAR *pbstrText);
|
|
|
|
virtual HRESULT OnLButtonUp(const POINT pt, const RECT *prcArea);
|
|
virtual HRESULT OnRButtonUp(const POINT pt, const RECT *prcArea);
|
|
|
|
DWORD GetStyle() {return m_lbiInfo.dwStyle;}
|
|
void SetStyle(DWORD dwStyle) {m_lbiInfo.dwStyle = dwStyle;}
|
|
|
|
GUID* GetGuidItem() {return &m_lbiInfo.guidItem;}
|
|
|
|
DWORD GetStatusInternal() {return m_dwStatus;}
|
|
void SetStatusInternal(DWORD dw) {m_dwStatus = dw;}
|
|
HRESULT ShowInternal(BOOL fShow, BOOL fNotify = FALSE);
|
|
|
|
void SetOrClearStatus(DWORD dw, BOOL fSet);
|
|
|
|
ITfLangBarItemSink *GetSink() { return m_plbiSink; }
|
|
|
|
void SetText(WCHAR *psz);
|
|
void SetToolTip(WCHAR *psz);
|
|
void SetStatus(DWORD dwStatus);
|
|
void Enable(BOOL fEnable);
|
|
BOOL IsEnable() { return m_fEnable; }
|
|
void ShowDefault(BOOL fShowDefault);
|
|
|
|
void SetID(UINT uid) { m_uid = uid; }
|
|
UINT GetID() { return m_uid; }
|
|
|
|
void UpdateButton();
|
|
|
|
protected:
|
|
//DWORD _dwStatus;
|
|
TF_LANGBARITEMINFO m_lbiInfo;
|
|
WCHAR m_szToolTip[CICBTN_TOOLTIP_MAX];
|
|
long m_cRef;
|
|
ITfLangBarItemSink *m_plbiSink;
|
|
|
|
private:
|
|
DWORD m_dwCookie;
|
|
DWORD m_dwStatus;
|
|
BOOL m_fShown;
|
|
BOOL m_fEnable;
|
|
UINT m_uid;
|
|
WCHAR m_szText[CICBTN_TEXT_MAX];
|
|
};
|
|
|
|
inline
|
|
void CCicButton::SetOrClearStatus(DWORD dw, BOOL fSet)
|
|
{
|
|
if (fSet)
|
|
m_dwStatus |= dw;
|
|
else
|
|
m_dwStatus &= ~dw;
|
|
}
|
|
|
|
inline
|
|
void CCicButton::SetToolTip(WCHAR *psz)
|
|
{
|
|
StrnCopyW(m_szToolTip, psz, CICBTN_TOOLTIP_MAX);
|
|
}
|
|
|
|
|
|
inline
|
|
void CCicButton::SetStatus(DWORD dwStatus)
|
|
{
|
|
BOOL fShown = m_fShown;
|
|
m_dwStatus = dwStatus;
|
|
ShowInternal(fShown);
|
|
}
|
|
|
|
inline
|
|
void CCicButton::Enable(BOOL fEnable)
|
|
{
|
|
m_fEnable = fEnable;
|
|
if(fEnable) { // enable?
|
|
m_dwStatus &= ~TF_LBI_STATUS_DISABLED;
|
|
} else {
|
|
m_dwStatus |= TF_LBI_STATUS_DISABLED;
|
|
}
|
|
}
|
|
|
|
inline
|
|
void CCicButton::ShowDefault(BOOL fShowDefault)
|
|
{
|
|
if( fShowDefault == FALSE ) {
|
|
m_lbiInfo.dwStyle |= TF_LBI_STYLE_HIDDENBYDEFAULT;
|
|
} else {
|
|
m_lbiInfo.dwStyle &= ~TF_LBI_STYLE_HIDDENBYDEFAULT;
|
|
}
|
|
}
|
|
|
|
inline
|
|
void CCicButton::SetText(WCHAR *psz)
|
|
{
|
|
StrnCopyW(m_szText, psz, CICBTN_TEXT_MAX);
|
|
}
|
|
|
|
inline
|
|
void CCicButton::UpdateButton()
|
|
{
|
|
if (m_plbiSink)
|
|
m_plbiSink->OnUpdate(TF_LBI_BTNALL| /*TF_LBI_BITMAP |*/ TF_LBI_STATUS /*| TF_LBI_BMPALL*/);
|
|
}
|
|
|
|
#endif // _CICBTN_H_
|