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.
 
 
 
 
 
 

154 lines
5.2 KiB

//
// correctionimx.h
//
#pragma once
#include "timsink.h"
#include "mscandui.h"
#include "globals.h"
#define ESCB_RESETTARGETPOS 1
#define ESCB_RECONVERTMYSELF 3
#define ESCB_INJECTALTERNATETEXT 4
enum WINDOWSTATE
{
WINDOW_HIDE = 0,
// Hides the correction widget window.
WINDOW_SMALL = 1,
// Resizes the correction widget window to small.
WINDOW_SMALLSHOW = 2,
// Shows the correction widget window in its initial small state.
WINDOW_LARGE = 3,
// Resizes the correction widget window to its large size.
WINDOW_REFRESH = 4,
// Moves the correction widget to a new location but does not change its size.
WINDOW_LARGECLOSE = 5
// Resizes the correction widget window to its large size and displays close icon.
};
#ifdef SUPPORT_INTERNAL_WIDGET
class CCorrectionIMX :
public ITfTextInputProcessor,
public ITfTextEditSink,
public ITfTextLayoutSink,
public ITfThreadFocusSink,
public ITfKeyTraceEventSink,
public CComObjectRoot,
public CComCoClass<CCorrectionIMX, &CLSID_CorrectionIMX>
{
public:
CCorrectionIMX();
~CCorrectionIMX();
STDMETHODIMP FinalConstruct(void);
BEGIN_COM_MAP(CCorrectionIMX)
COM_INTERFACE_ENTRY(ITfTextInputProcessor)
COM_INTERFACE_ENTRY(ITfTextEditSink)
COM_INTERFACE_ENTRY(ITfTextLayoutSink)
COM_INTERFACE_ENTRY(ITfThreadFocusSink)
COM_INTERFACE_ENTRY(ITfKeyTraceEventSink)
END_COM_MAP()
DECLARE_NOT_AGGREGATABLE(CCorrectionIMX)
DECLARE_REGISTRY_RESOURCE(IDR_CORRECTIONIMX)
static HRESULT CreateInstance(IUnknown *pUnkOuter, REFIID riid, void **ppvObj);
//
// ITfTextInputProcessor
//
STDMETHODIMP Activate(ITfThreadMgr *ptim, TfClientId tid);
STDMETHODIMP Deactivate();
// ITfTextEditSink
STDMETHODIMP OnEndEdit(ITfContext *pic, TfEditCookie ecReadOnly, ITfEditRecord *pEditRecord);
// ITfTextLayoutSink
STDMETHODIMP OnLayoutChange( ITfContext *pic, TfLayoutCode lcode, ITfContextView *pView );
// ITfThreadFocusSink
STDMETHODIMP OnSetThreadFocus(void);
STDMETHODIMP OnKillThreadFocus(void);
// ITfKeyTraceEventSink
STDMETHODIMP OnKeyTraceDown(WPARAM wParam,LPARAM lParam);
STDMETHODIMP OnKeyTraceUp(WPARAM wParam,LPARAM lParam);
TfClientId GetId(void) { return m_tid; }
ITfContext *GetIC(void) { return m_cpic; }
CComPtr<ITfThreadMgr> m_cptim;
private:
// Internal functions
HRESULT InitICPriv(TfClientId tid, CICPriv *priv, ITfContext *pic);
HRESULT DeleteICPriv(CICPriv *picp, ITfContext *pic);
HRESULT GetReconversion(TfEditCookie ec, ITfCandidateList** ppCandList);
static HRESULT SetResult(ITfContext *pic, ITfRange *pRange, CCandidateString *pCand, TfCandidateResult imcr);
static HRESULT SetOptionResult(ITfContext *pic, ITfRange *pRange, CCandidateString *pCand, TfCandidateResult imcr);
HRESULT ShowCandidateList(TfEditCookie ec, ITfContext *pic, ITfRange *pRange, ITfCandidateList *pCandList);
HRESULT IsWordInDictionary(WCHAR *pwzWord);
HRESULT AddWordToDictionary(WCHAR *pwzWord);
HRESULT RemoveWordFromDictionary(WCHAR *pwzWord);
HRESULT IsCandidateObjectOpen(ITfContext *pic, BOOL *fOpen);
HRESULT CompareRange(TfEditCookie ecReadOnly, ITfRange *pRange1, ITfRange *pRange2, BOOL *fIdentical);
HRESULT FindWordRange(TfEditCookie ecReadOnly, ITfRange *pRangeIP, ITfRange **pRangeWord);
HRESULT DoesUserSelectionMatchReconversion(TfEditCookie ecReadOnly, ITfRange *pRangeUser, ITfRange *pRangeReconv, BOOL *fMatch);
HRESULT UpdateWidgetLocation(TfEditCookie ec);
HRESULT Show(WINDOWSTATE eWindowState);
HRESULT DrawWidget(BYTE uAlpha);
HRESULT LazyInitializeWindow(void);
static HRESULT ICCallback(UINT uCode, ITfContext *pic, void *pv);
static HRESULT DIMCallback(UINT uCode, ITfDocumentMgr *pdim, ITfDocumentMgr *pdimPrevFocus, void *pv);
static HRESULT EditSessionCallback(TfEditCookie ec, CEditSession *pes);
static LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
CComPtr<ITfRange> m_cpRangeReconv;
CComPtr<ITfRange> m_cpRangeUser;
CComPtr<ITfRange> m_cpRangeWord;
CComPtr<ITfCandidateUI> m_cpCandUIEx;
CComPtr<ITfFnReconversion> m_cpSysReconv;
CComPtr<ITfContext> m_cpic;
TfClientId m_tid;
CThreadMgrEventSink *m_ptimEventSink;
WCHAR m_wszDelete[MAX_PATH];
WCHAR m_wszAddPrefix[MAX_PATH];
WCHAR m_wszAddPostfix[MAX_PATH];
DWORD m_dwLayoutCookie;
DWORD m_dwEditCookie;
DWORD m_dwThreadFocusCookie;
DWORD m_dwKeyTraceCookie;
BOOL m_fExpanded;
RECT m_rcSelection;
BOOL m_fDisplayAlternatesMyself;
HWND m_hWnd;
HICON m_hIconInvoke;
HICON m_hIconInvokeLarge;
HICON m_hIconInvokeClose;
WINDOWSTATE m_eWindowState;
UINT m_uAlpha;
CComPtr<ISpLexicon> m_cpLexicon;
BOOL m_fCandidateOpen;
BOOL m_fKeyDown;
ATOM m_hAtom;
};
#endif // SUPPORT_INTERNAL_WIDGET