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.
 
 
 
 
 
 

255 lines
8.2 KiB

/*++
Copyright (c) 1985 - 1999, Microsoft Corporation
Module Name:
immif.h
Abstract:
This file defines the IMM Interface Class.
Author:
Revision History:
Notes:
--*/
#ifndef _IMMIF_H_
#define _IMMIF_H_
#include "imedefs.h"
#include "cime.h"
#include "ctxtcomp.h"
#include "caime.h"
#include "ico.h"
#include "globals.h"
#include "immxutil.h"
#include "a_context.h"
class ImmIfIME : public CAIME
{
public:
ImmIfIME();
~ImmIfIME();
//
// IActiveIME methods
//
STDMETHODIMP ConnectIMM(IActiveIMMIME_Private *pActiveIMM);
STDMETHODIMP UnconnectIMM();
STDMETHODIMP Inquire(DWORD dwSystemInfoFlags, IMEINFO *pIMEInfo, LPWSTR szWndClass, DWORD *pdwPrivate);
STDMETHODIMP ConversionList(HIMC hIMC, LPWSTR szSource, UINT uFlag, UINT uBufLen, CANDIDATELIST *pDest, UINT *puCopied);
STDMETHODIMP Configure(HKL hKL, HWND hWnd, DWORD dwMode, REGISTERWORDW *pRegisterWord);
STDMETHODIMP Destroy(UINT uReserved);
STDMETHODIMP Escape(HIMC hIMC, UINT uEscape, void *pData, LRESULT *plResult);
STDMETHODIMP ProcessKey(HIMC hIMC, UINT uVirKey, DWORD lParam, BYTE *pbKeyState);
STDMETHODIMP Notify(HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue);
STDMETHODIMP SelectEx(HIMC hIMC, DWORD dwFlags, BOOL bIsRealIme_SelKL, BOOL bIsRealIme_UnSelKL);
STDMETHODIMP UnSelectCheck(HIMC hIMC);
STDMETHODIMP SetCompositionString(HIMC hIMC, DWORD dwIndex, void *pComp, DWORD dwCompLen, void *pRead, DWORD dwReadLen);
STDMETHODIMP ToAsciiEx(UINT uVirKey, UINT uScanCode, BYTE *pbKeyState, UINT fuState, HIMC hIMC, DWORD *pdwTransBuf, UINT *puSize);
STDMETHODIMP RegisterWord(LPWSTR szReading, DWORD dwStyle, LPWSTR szString);
STDMETHODIMP UnregisterWord(LPWSTR szReading, DWORD dwStyle, LPWSTR szString);
STDMETHODIMP GetRegisterWordStyle(UINT nItem, STYLEBUFW *pStyleBuf, UINT *puBufSize);
STDMETHODIMP EnumRegisterWord(LPWSTR szReading, DWORD dwStyle, LPWSTR szRegister, LPVOID pData, IEnumRegisterWordW **ppEnum);
STDMETHODIMP GetCodePageA(UINT *uCodePage);
STDMETHODIMP GetLangId(LANGID *plid);
STDMETHODIMP AssociateFocus(HWND hWnd, HIMC hIMC, DWORD dwFlags);
STDMETHODIMP SetThreadCompartmentValue(REFGUID rguid, VARIANT *pvar);
STDMETHODIMP GetThreadCompartmentValue(REFGUID rguid, VARIANT *pvar);
HRESULT ToAsciiEx(UINT uVirKey, UINT uScanCode, BYTE* pbKeyState, UINT fuState, HIMC hIMC, TRANSMSGLIST* pTransBuf, UINT* puSize);
//
// AIMM1.2 interface
//
STDMETHODIMP QueryService(REFGUID guidService, REFIID riid, void **ppv);
public:
BOOL _ImeInquire(LPIMEINFO, LPWSTR, DWORD);
//
// Helpers
//
static BOOL WINAPI _RegisterImeClass(WNDPROC lpfnUIWndProc);
static void WINAPI _UnRegisterImeClass();
LIBTHREAD *_GetLibTLS()
{
return &_libTLS;
}
BOOL IsRealIme()
{
BOOL fReal = FALSE;
if (m_pIActiveIMMIME)
{
m_pIActiveIMMIME->IsRealImePublic(&fReal);
}
return fReal;
}
private:
BOOL WINAPI _NotifyIME(HIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue);
HRESULT WINAPI _ToAsciiEx(HIMC hImc, UINT uVKey, UINT uScanCode, TRANSMSGLIST* pTransBuf, UINT* puSize);
BOOL WINAPI _WantThisKey(HIMC hImc, UINT uVKey, BOOL* pfNextHook = NULL)
{
IMCLock imc(hImc);
if (imc.Invalid())
return false;
return _WantThisKey(imc, uVKey, pfNextHook);
}
BOOL WINAPI _WantThisKey(IMCLock& imc, UINT uVKey, BOOL* pfNextHook = NULL);
HRESULT _HandleThisKey(IMCLock& imc, UINT uVKey);
public:
HRESULT _UpdateCompositionString(DWORD dwDeltaStart = 0);
HRESULT _CompCancel(IMCLock& imc);
HRESULT _CompComplete(IMCLock& imc, BOOL fSync = TRUE);
public:
//
// Cicero stuff
//
HRESULT InitIMMX();
void UnInitIMMX();
private:
BOOL IsCheckAtom();
public:
Interface_Attach<ITfContext> GetInputContext(IMCLock& imc) const
{
CAImeContext* _pAImeContext = imc->m_pAImeContext;
if (!_pAImeContext)
return NULL;
Interface_Attach<ITfContext> ic(_pAImeContext->GetInputContext());
return ic;
}
Interface_Attach<ITfDocumentMgr> GetDocumentManager(IMCLock& imc) const
{
CAImeContext* _pAImeContext = imc->m_pAImeContext;
if (!_pAImeContext)
return NULL;
Interface_Attach<ITfDocumentMgr> dim(_pAImeContext->GetDocumentManager());
return dim;
}
Interface_Attach<ITfContextOwnerServices> GetInputContextOwnerSink(IMCLock& imc) const
{
CAImeContext* _pAImeContext = imc->m_pAImeContext;
if (!_pAImeContext)
return NULL;
Interface_Attach<ITfContextOwnerServices> iccb(_pAImeContext->GetInputContextOwnerSink());
return iccb;
}
Interface_Attach<ITfThreadMgr_P> GetThreadManagerInternal() const
{
Interface_Attach<ITfThreadMgr_P> tim(m_tim);
return tim;
}
Interface_Attach<ImmIfIME> GetCurrentInterface()
{
Interface_Attach<ImmIfIME> ImmIfIme(this);
return ImmIfIme;
}
TfClientId GetClientId() {return m_tfClientId;}
bool IsOpenStatusChanging() {return m_ulOpenStatusChanging > 0;}
protected:
static const char s_szUIClassName[16];
protected:
bool m_fCicInit : 1;
bool m_fOnSetFocus : 1;
ULONG m_ulOpenStatusChanging;
ULONG m_ulKorImxModeChanging;
ITfThreadMgr_P *m_tim;
ITfDocumentMgr *m_dimEmpty; // empty dim for NULL hIMC.
TfClientId m_tfClientId;
ITfKeystrokeMgr *m_pkm;
IAImeProfile *m_AImeProfile;
LIBTHREAD _libTLS; // tls for the helper library. Since this object is apt threaded,
// all members are accessed in a single thread
// also, cicero will only create a single instance of this obj per thread
BOOL m_fAddedProcessAtom : 1;
private:
HRESULT Internal_SetCompositionString(CWCompString& wCompStr, CWCompString& wCompReadStr);
HRESULT Internal_ReconvertString(IMCLock& imc, CWReconvertString& wReconvStr, CWReconvertString& wReconvReadStr);
static HRESULT Internal_QueryReconvertString_ICOwnerSink(UINT uCode, ICOARGS *pargs, VOID *pv);
HRESULT Internal_QueryReconvertString(IMCLock& imc, RECONVERTSTRING* pReconv, UINT cp, BOOL fNeedAW);
void SetFocus(HWND hWnd, ITfDocumentMgr* pdim, BOOL fSetFocus);
public:
// void AdjustZeroCompLenReconvertString(RECONVERTSTRING *pReconv, UINT cp, BOOL fAnsi);
HRESULT SetupReconvertString(ITfContext *pic, IMCLock& imc, UINT uPrivMsg = 0);
HRESULT EndReconvertString(IMCLock& imc);
HRESULT SetupDocFeedString(ITfContext *pic, IMCLock& imc);
HRESULT ClearDocFeedBuffer(ITfContext *pic, IMCLock& imc, BOOL fSync = TRUE);
private:
HRESULT _ReconvertStringNegotiation(ITfContext *pic, IMCLock& imc, UINT uPrivMsg);
HRESULT _ReconvertStringTextStore(ITfContext *pic, IMCLock& imc, UINT uPrivMsg);
public:
HRESULT GetTextAndAttribute(IMCLock& imc,
CWCompString* wCompString, CWCompAttribute* wCompAttribute);
HRESULT GetTextAndAttribute(IMCLock& imc,
CBCompString* bCompString, CBCompAttribute* bCompAttribute);
public:
HRESULT GetCursorPosition(IMCLock& imc, CWCompCursorPos* wCursorPosition);
public:
HRESULT GetSelection(IMCLock& imc, CWCompCursorPos& wStartSelection, CWCompCursorPos& wEndSelection);
//
// Notification
//
public:
HRESULT OnSetOpenStatus(IMCLock& imc);
HRESULT OnSetConversionSentenceMode(IMCLock& imc);
HRESULT OnSetCandidatePos(IMCLock& imc);
HRESULT OnSetKorImxConversionMode(IMCLock& imc);
};
inline void SetThis(HWND hWnd, LPARAM lParam)
{
SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)((CREATESTRUCT *)lParam)->lpCreateParams);
}
inline ImmIfIME *GetThis(HWND hWnd)
{
ImmIfIME *pIME = (ImmIfIME *)GetWindowLongPtr(hWnd, GWLP_USERDATA);
ASSERT(pIME != NULL);
return pIME;
}
#endif // _IMMIF_H_