Leaked source code of windows server 2003
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.
 
 
 
 
 
 

416 lines
12 KiB

//
// nuibase.h
//
// Generic ITfTextEventSink object
//
#ifndef NUIBASE_H
#define NUIBASE_H
#include "ctfutb.h"
#include "iconlib.h"
inline HRESULT LangBarInsertMenu(ITfMenu *pMenu, UINT uId, WCHAR *psz, BOOL bChecked = FALSE, BOOL bRadioChecked = FALSE)
{
DWORD dwFlags = 0;
if (bChecked)
dwFlags |= TF_LBMENUF_CHECKED;
if (bRadioChecked)
dwFlags |= TF_LBMENUF_RADIOCHECKED;
return pMenu->AddMenuItem(uId,
dwFlags,
NULL,
NULL,
psz,
wcslen(psz),
NULL);
}
inline HRESULT LangBarInsertGrayedMenu(ITfMenu *pMenu, WCHAR *psz)
{
return pMenu->AddMenuItem((UINT)-1,
TF_LBMENUF_GRAYED,
NULL,
NULL,
psz,
wcslen(psz),
NULL);
}
inline HRESULT LangBarInsertMenu(ITfMenu *pMenu, UINT uId, WCHAR *psz, HBITMAP hbmp, HBITMAP hbmpMask)
{
return pMenu->AddMenuItem(uId,
0,
hbmp,
hbmpMask,
psz,
wcslen(psz),
NULL);
}
inline HRESULT LangBarInsertMenu(ITfMenu *pMenu, UINT uId, WCHAR *psz, BOOL bChecked, HICON hIcon)
{
HBITMAP hbmp = NULL;
HBITMAP hbmpMask = NULL;
if (hIcon)
{
HICON hSmIcon = (HICON)CopyImage(hIcon,
IMAGE_ICON,
16,
16,
LR_COPYFROMRESOURCE);
SIZE size = {16, 16};
if (!GetIconBitmaps(hSmIcon ? hSmIcon : hIcon, &hbmp, &hbmpMask, &size))
return E_FAIL;
if (hSmIcon)
DestroyIcon(hSmIcon);
if (hIcon)
DestroyIcon(hIcon);
}
return pMenu->AddMenuItem(uId,
bChecked ? TF_LBMENUF_CHECKED : 0,
hbmp,
hbmpMask,
psz,
wcslen(psz),
NULL);
}
inline HRESULT LangBarInsertGrayedMenu(ITfMenu *pMenu, WCHAR *psz, HICON hIcon)
{
HBITMAP hbmp = NULL;
HBITMAP hbmpMask = NULL;
if (hIcon)
{
HICON hSmIcon = (HICON)CopyImage(hIcon,
IMAGE_ICON,
16,
16,
LR_COPYFROMRESOURCE);
SIZE size = {16, 16};
if (!GetIconBitmaps(hSmIcon ? hSmIcon : hIcon, &hbmp, &hbmpMask, &size))
return E_FAIL;
if (hSmIcon)
DestroyIcon(hSmIcon);
if (hIcon)
DestroyIcon(hIcon);
}
return pMenu->AddMenuItem((UINT)-1,
TF_LBMENUF_GRAYED,
hbmp,
hbmpMask,
psz,
wcslen(psz),
NULL);
}
inline HRESULT LangBarInsertSubMenu(ITfMenu *pMenu, WCHAR *psz, ITfMenu **ppSubMenu)
{
return pMenu->AddMenuItem(UINT(-1),
TF_LBMENUF_SUBMENU,
NULL,
NULL,
psz,
wcslen(psz),
ppSubMenu);
}
inline HRESULT LangBarInsertSeparator(ITfMenu *pMenu)
{
return pMenu->AddMenuItem((UINT)(-1),
TF_LBMENUF_SEPARATOR,
NULL,
NULL,
NULL,
0,
NULL);
}
#define NUIBASE_TOOLTIP_MAX 256
#define NUIBASE_TEXT_MAX 256
//////////////////////////////////////////////////////////////////////////////
//
// CLBarItemBase
//
//////////////////////////////////////////////////////////////////////////////
class __declspec(novtable) CLBarItemBase
{
public:
CLBarItemBase();
virtual ~CLBarItemBase();
void InitNuiInfo(REFCLSID clsid, REFGUID rguid, DWORD dwStyle, ULONG ulSort, WCHAR *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);
DWORD GetStyle() {return _lbiInfo.dwStyle;}
void SetStyle(DWORD dwStyle) {_lbiInfo.dwStyle = dwStyle;}
GUID* GetGuidItem() {return &_lbiInfo.guidItem;}
DWORD GetStatusInternal() {return _dwStatus;}
void SetStatusInternal(DWORD dw) {_dwStatus = dw;}
HRESULT ShowInternal(BOOL fShow, BOOL fNotify);
void SetOrClearStatus(DWORD dw, BOOL fSet)
{
if (fSet)
_dwStatus |= dw;
else
_dwStatus &= ~dw;
}
void SetToolTip(WCHAR *psz, UINT cch = (UINT)(-1))
{
if (cch == (UINT)(-1))
StringCchCopyW(_szToolTip, ARRAYSIZE(_szToolTip), psz);
else
{
UINT cchTemp = (UINT)min(ARRAYSIZE(_szToolTip) - 1, cch);
memcpy(_szToolTip, psz, cchTemp * sizeof(WCHAR));
_szToolTip[cchTemp] = L'\0';
}
}
virtual HRESULT OnLButtonUp(const POINT pt, const RECT *prcArea);
virtual HRESULT OnRButtonUp(const POINT pt, const RECT *prcArea);
ITfLangBarItemSink *GetSink() {return _plbiSink;}
protected:
DWORD _dwStatus;
TF_LANGBARITEMINFO _lbiInfo;
WCHAR _szToolTip[NUIBASE_TOOLTIP_MAX];
long _cRef;
ITfLangBarItemSink *_plbiSink;
private:
DWORD _dwCookie;
};
//////////////////////////////////////////////////////////////////////////////
//
// CLBarItemButtonBase
//
//////////////////////////////////////////////////////////////////////////////
class __declspec(novtable) CLBarItemButtonBase : public CLBarItemBase,
public ITfSource,
public ITfLangBarItemButton
{
public:
CLBarItemButtonBase();
virtual ~CLBarItemButtonBase();
//
// IUnknown methods
//
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// ITfSource
//
STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
STDMETHODIMP UnadviseSink(DWORD dwCookie);
//
// ITfLangBarItem
//
STDMETHODIMP GetInfo(TF_LANGBARITEMINFO *pInfo);
STDMETHODIMP GetStatus(DWORD *pdwStatus);
STDMETHODIMP Show(BOOL fShow);
STDMETHODIMP GetTooltipString(BSTR *pbstrToolTip);
//
// ITfLangBarItemButton
//
STDMETHODIMP OnClick(TfLBIClick click, POINT pt, const RECT *prcArea);
STDMETHODIMP InitMenu(ITfMenu *pMenu);
STDMETHODIMP OnMenuSelect(UINT wID);
STDMETHODIMP GetIcon(HICON *phIcon);
STDMETHODIMP GetText(BSTR *pbstrText);
void SetIcon(HICON hIcon) {_hIcon = hIcon;}
HICON GetIcon() {return _hIcon;}
void SetText(WCHAR *psz)
{
StringCchCopyW(_szText, ARRAYSIZE(_szText), psz);
}
private:
HICON _hIcon;
WCHAR _szText[NUIBASE_TEXT_MAX];
};
//////////////////////////////////////////////////////////////////////////////
//
// CLBarItemBitmapButtonBase
//
//////////////////////////////////////////////////////////////////////////////
class __declspec(novtable) CLBarItemBitmapButtonBase : public CLBarItemBase,
public ITfSource,
public ITfLangBarItemBitmapButton
{
public:
CLBarItemBitmapButtonBase();
virtual ~CLBarItemBitmapButtonBase();
//
// IUnknown methods
//
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// ITfSource
//
STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
STDMETHODIMP UnadviseSink(DWORD dwCookie);
//
// ITfLangBarItem
//
STDMETHODIMP GetInfo(TF_LANGBARITEMINFO *pInfo);
STDMETHODIMP GetStatus(DWORD *pdwStatus);
STDMETHODIMP Show(BOOL fShow);
STDMETHODIMP GetTooltipString(BSTR *pbstrToolTip);
//
// ITfLangBarItemBitmapButton
//
STDMETHODIMP OnClick(TfLBIClick click, POINT pt, const RECT *prcArea);
STDMETHODIMP InitMenu(ITfMenu *pMenu);
STDMETHODIMP OnMenuSelect(UINT wID);
STDMETHODIMP GetPreferredSize(const SIZE *pszDefault, SIZE *psize);
STDMETHODIMP DrawBitmap(LONG x, LONG y, DWORD dwFlags, HBITMAP *phbmp, HBITMAP *phbmpMask) = 0;
STDMETHODIMP GetText(BSTR *pbstrText);
void SetText(WCHAR *psz)
{
StringCchCopyW(_szText, ARRAYSIZE(_szText), psz);
}
void SetPreferedSize(SIZE *psize) {_sizePrefered = *psize;}
private:
SIZE _sizePrefered;
WCHAR _szText[NUIBASE_TEXT_MAX];
};
//////////////////////////////////////////////////////////////////////////////
//
// CLBarItemBitmapBase
//
//////////////////////////////////////////////////////////////////////////////
class __declspec(novtable) CLBarItemBitmapBase : public CLBarItemBase,
public ITfSource,
public ITfLangBarItemBitmap
{
public:
CLBarItemBitmapBase();
virtual ~CLBarItemBitmapBase();
//
// IUnknown methods
//
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// ITfSource
//
STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
STDMETHODIMP UnadviseSink(DWORD dwCookie);
//
// ITfLangBarItem
//
STDMETHODIMP GetInfo(TF_LANGBARITEMINFO *pInfo);
STDMETHODIMP GetStatus(DWORD *pdwStatus);
STDMETHODIMP Show(BOOL fShow);
STDMETHODIMP GetTooltipString(BSTR *pbstrToolTip);
//
// ITfLangBarItemBitmap
//
STDMETHODIMP OnClick(TfLBIClick click, POINT pt, const RECT *prcArea);
STDMETHODIMP GetPreferredSize(const SIZE *pszDefault, SIZE *psize);
STDMETHODIMP DrawBitmap(LONG x, LONG y, DWORD dwFlags, HBITMAP *phbmp, HBITMAP *phbmpMask) = 0;
void SetPreferedSize(SIZE *psize) {_sizePrefered = *psize;}
private:
SIZE _sizePrefered;
};
//////////////////////////////////////////////////////////////////////////////
//
// CLBarItemBalloonBase
//
//////////////////////////////////////////////////////////////////////////////
class __declspec(novtable) CLBarItemBalloonBase : public CLBarItemBase,
public ITfSource,
public ITfLangBarItemBalloon
{
public:
CLBarItemBalloonBase();
virtual ~CLBarItemBalloonBase();
//
// IUnknown methods
//
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
//
// ITfSource
//
STDMETHODIMP AdviseSink(REFIID riid, IUnknown *punk, DWORD *pdwCookie);
STDMETHODIMP UnadviseSink(DWORD dwCookie);
//
// ITfLangBarItem
//
STDMETHODIMP GetInfo(TF_LANGBARITEMINFO *pInfo);
STDMETHODIMP GetStatus(DWORD *pdwStatus);
STDMETHODIMP Show(BOOL fShow);
STDMETHODIMP GetTooltipString(BSTR *pbstrToolTip);
//
// ITfLangBarItemBalloon
//
STDMETHODIMP OnClick(TfLBIClick click, POINT pt, const RECT *prcArea);
STDMETHODIMP GetPreferredSize(const SIZE *pszDefault, SIZE *psize);
STDMETHODIMP GetBalloonInfo(TF_LBBALLOONINFO *pInfo) = 0;
void SetPreferedSize(SIZE *psize) {_sizePrefered = *psize;}
private:
SIZE _sizePrefered;
};
#endif // NUIBASE_H