226 lines
6.2 KiB
C
226 lines
6.2 KiB
C
|
/*
|
||
|
*
|
||
|
* @doc INTERNAL
|
||
|
*
|
||
|
* @module _CMSGFLT.H CTextMsgFilter declaration |
|
||
|
*
|
||
|
* Purpose: CTextMsgFilter is used in handling IME as well as Cicero Input.
|
||
|
*
|
||
|
* Author: <nl>
|
||
|
* 2/6/98 v-honwch
|
||
|
*
|
||
|
* Copyright (c) 1995-2000, Microsoft Corporation. All rights reserved.
|
||
|
*/
|
||
|
|
||
|
// Forward declarations
|
||
|
|
||
|
#ifndef NOPRIVATEMESSAGE
|
||
|
#include "_MSREMSG.H"
|
||
|
#endif
|
||
|
|
||
|
class CIme;
|
||
|
class CUIM;
|
||
|
class CTextMsgFilter;
|
||
|
class CLangProfileSink;
|
||
|
|
||
|
// CheckIMEType dwFlags
|
||
|
#define CHECK_IME_SERVICE 0x0001
|
||
|
|
||
|
#ifndef __ITfThreadMgr_INTERFACE_DEFINED__
|
||
|
class ITfThreadMgr;
|
||
|
#endif
|
||
|
|
||
|
class CLangProfileSink : public ITfLanguageProfileNotifySink
|
||
|
{
|
||
|
public:
|
||
|
CLangProfileSink();
|
||
|
|
||
|
//
|
||
|
// IUnknown methods
|
||
|
//
|
||
|
STDMETHODIMP QueryInterface(REFIID riid, void **ppvObj);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
//
|
||
|
// ITfLanguageProfilesNotifySink
|
||
|
//
|
||
|
STDMETHODIMP OnLanguageChange(LANGID langid, BOOL *pfAccept);
|
||
|
STDMETHODIMP OnLanguageChanged();
|
||
|
|
||
|
HRESULT _Advise(CTextMsgFilter *, ITfInputProcessorProfiles *pipp);
|
||
|
HRESULT _Unadvise();
|
||
|
|
||
|
private:
|
||
|
|
||
|
long _cRef;
|
||
|
CTextMsgFilter *_pTextMsgFilter;
|
||
|
ITfInputProcessorProfiles *_pITFIPP;
|
||
|
DWORD _dwCookie;
|
||
|
};
|
||
|
|
||
|
class CTextMsgFilter : public ITextMsgFilter
|
||
|
{
|
||
|
public :
|
||
|
|
||
|
friend class CUIM;
|
||
|
friend class CLangProfileSink;
|
||
|
|
||
|
HRESULT STDMETHODCALLTYPE QueryInterface(
|
||
|
REFIID riid,
|
||
|
void **ppvObject);
|
||
|
ULONG STDMETHODCALLTYPE AddRef(void);
|
||
|
ULONG STDMETHODCALLTYPE Release(void);
|
||
|
HRESULT STDMETHODCALLTYPE AttachDocument( HWND hwnd, ITextDocument2 *pTextDoc, IUnknown *punk);
|
||
|
HRESULT STDMETHODCALLTYPE HandleMessage(
|
||
|
UINT *pmsg,
|
||
|
WPARAM *pwparam,
|
||
|
LPARAM *plparam,
|
||
|
LRESULT *plres);
|
||
|
HRESULT STDMETHODCALLTYPE AttachMsgFilter( ITextMsgFilter *pMsgFilter);
|
||
|
|
||
|
COMPCOLOR* GetIMECompAttributes();
|
||
|
|
||
|
void OnSetUIMMode(WORD wUIMModeBias);
|
||
|
LRESULT OnGetUIMMode() { return _wUIMModeBias; };
|
||
|
|
||
|
~CTextMsgFilter();
|
||
|
|
||
|
BOOL IsIMEComposition() { return (_ime != NULL);};
|
||
|
BOOL GetTxSelection();
|
||
|
BOOL NoIMEProcess();
|
||
|
BOOL MouseOperation(UINT msg, long ichStart, long cchComp, WPARAM wParam, WPARAM *pwParamBefore,
|
||
|
BOOL *pfTerminateIME, HWND hwndIME, long *pCpCursor=NULL, ITfMouseSink *pMouseSink=NULL);
|
||
|
|
||
|
CIme *_ime; // non-NULL when IME composition active
|
||
|
HWND _hwnd;
|
||
|
UINT _uKeyBoardCodePage; // current keyboard codepage
|
||
|
UINT _uSystemCodePage; // system codepage
|
||
|
|
||
|
DWORD _fIMECancelComplete :1; // If aborting IME, cancel comp string, else complete
|
||
|
DWORD _fUnicodeIME :1; // TRUE if Unicode IME
|
||
|
DWORD _fIMEAlwaysNotify :1; // Send Notification during IME undetermined string
|
||
|
DWORD _fHangulToHanja :1; // TRUE during Hangul to Hanja conversion
|
||
|
DWORD _fOvertypeMode :1; // TRUE if overtype mode is on.
|
||
|
DWORD _fMSIME :1; // TRUE if MSIME98 or later
|
||
|
DWORD _fUsingAIMM :1; // TRUE if AIMM is activated
|
||
|
DWORD _fUnicodeWindow :1; // TRUE if Unicode Window
|
||
|
DWORD _fForceEnable :1; // TRUE if Force Enable on Focus
|
||
|
DWORD _fForceActivate :1; // TRUE if Force Activate on Focus
|
||
|
DWORD _fForceRemember :1; // TRUE if Force Remember
|
||
|
DWORD _fIMEEnable :1; // TRUE if IME was enable before
|
||
|
DWORD _fRE10Mode :1; // TRUE if running in RE1.0 Mode
|
||
|
DWORD _fUsingUIM :1; // TRUE if Cicero is activated
|
||
|
DWORD _fTurnOffUIM :1; // TRUE if Client doesn't want UIM
|
||
|
DWORD _fTurnOffAIMM :1; // TRUE if Client doesn't want AIIM
|
||
|
DWORD _nIMEMode :2; // 1 = IME_SMODE_PLAURALCLAUSE
|
||
|
// 2 = IME_SMODE_NONE
|
||
|
DWORD _fNoIme :1; // TRUE if Client has turn off IME processing
|
||
|
DWORD _fRestoreOLDIME :1; // TRUE if _wOldIMESentence is setup before
|
||
|
DWORD _fSendTransaction :1; // TRUE if we need to send EndEditTransaction
|
||
|
DWORD _fReceivedKeyDown :1; // TRUE if we have received key down message
|
||
|
DWORD _fAllowEmbedded :1; // TRUE if we allow Cicero insert embedded
|
||
|
DWORD _fAllowSmartTag :1; // TRUE if we allow Cicero SmartTag tips
|
||
|
DWORD _fAllowProofing :1; // TRUE if we allow Cicero Proofing tips
|
||
|
|
||
|
WORD _wOldIMESentence; // for IME_SMODE_PHRASEPREDICT use
|
||
|
WORD _wUIMModeBias; // for UIM Mode bias
|
||
|
|
||
|
// Support for SETIMEOPTIONS:
|
||
|
DWORD _fIMEConversion; // for Force Remember use
|
||
|
DWORD _fIMESentence; // for Force Remember use
|
||
|
HKL _fIMEHKL; // for Force Remember use
|
||
|
|
||
|
long _cpReconvertStart; // use during reconversion
|
||
|
long _cpReconvertEnd; // use during reconversion
|
||
|
long _lFEFlags; // For FE setting (ES_NOIME, ES_SELFIME)
|
||
|
|
||
|
COMPCOLOR* _pcrComp; // Support 1.0 mode composition color
|
||
|
ITextDocument2 *_pTextDoc;
|
||
|
ITextServices *_pTextService;
|
||
|
ITextSelection *_pTextSel;
|
||
|
ITfThreadMgr *_pTim;
|
||
|
CUIM *_pCUIM;
|
||
|
TfClientId _tid;
|
||
|
#ifndef NOPRIVATEMESSAGE
|
||
|
CMsgCallBack *_pMsgCallBack;
|
||
|
#endif
|
||
|
|
||
|
ITfInputProcessorProfiles *_pITfIPP;
|
||
|
CLangProfileSink *_pCLangProfileSink;
|
||
|
|
||
|
private:
|
||
|
ULONG _crefs;
|
||
|
|
||
|
ITextMsgFilter * _pFilter;
|
||
|
|
||
|
HIMC _hIMCContext;
|
||
|
|
||
|
// private methods
|
||
|
HRESULT OnWMChar(
|
||
|
UINT *pmsg,
|
||
|
WPARAM *pwparam,
|
||
|
LPARAM *plparam,
|
||
|
LRESULT *plres);
|
||
|
|
||
|
HRESULT OnWMIMEChar(
|
||
|
UINT *pmsg,
|
||
|
WPARAM *pwparam,
|
||
|
LPARAM *plparam,
|
||
|
LRESULT *plres);
|
||
|
|
||
|
HRESULT OnIMEReconvert(
|
||
|
UINT *pmsg,
|
||
|
WPARAM *pwparam,
|
||
|
LPARAM *plparam,
|
||
|
LRESULT *plres,
|
||
|
BOOL fUnicode);
|
||
|
|
||
|
BOOL CheckIMEChange(
|
||
|
LPRECONVERTSTRING lpRCS,
|
||
|
long cpParaStart,
|
||
|
long cpParaEnd,
|
||
|
long cpMin,
|
||
|
long cpMax,
|
||
|
BOOL fUnicode);
|
||
|
|
||
|
HRESULT OnIMEQueryPos(
|
||
|
UINT *pmsg,
|
||
|
WPARAM *pwparam,
|
||
|
LPARAM *plparam,
|
||
|
LRESULT *plres,
|
||
|
BOOL fUnicode);
|
||
|
|
||
|
BOOL CheckIMEType( HKL hKL, DWORD dwFlags = CHECK_IME_SERVICE);
|
||
|
|
||
|
HRESULT InputFEChar( WCHAR wchFEChar );
|
||
|
|
||
|
void OnSetFocus();
|
||
|
void OnKillFocus();
|
||
|
|
||
|
LRESULT OnSetIMEOptions(WPARAM wparam, LPARAM lparam);
|
||
|
LRESULT OnGetIMEOptions();
|
||
|
void SetupIMEOptions();
|
||
|
void SetupCallback();
|
||
|
void SetupLangSink();
|
||
|
void ReleaseLangSink();
|
||
|
void CompleteUIMTyping(LONG mode, BOOL fTransaction = TRUE);
|
||
|
void StartUIM();
|
||
|
void StartAimm(BOOL fUseAimm12);
|
||
|
void TurnOffUIM(BOOL fSafeToSendMessage);
|
||
|
void TurnOffAimm(BOOL fSafeToSendMessage);
|
||
|
|
||
|
int OnGetIMECompText(WPARAM wparam, LPARAM lparam);
|
||
|
void OnSetIMEMode(WPARAM wparam, LPARAM lparam);
|
||
|
LRESULT OnGetIMEMode()
|
||
|
{
|
||
|
if (!_nIMEMode)
|
||
|
return 0;
|
||
|
return _nIMEMode == 1 ? IMF_SMODE_PLAURALCLAUSE : IMF_SMODE_NONE;
|
||
|
};
|
||
|
void SetIMESentenseMode(BOOL fSetup, HKL hKL = NULL);
|
||
|
|
||
|
void HandleCTFService(WPARAM wparam, LPARAM lparam);
|
||
|
};
|
||
|
|