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.
203 lines
5.9 KiB
203 lines
5.9 KiB
/*++
|
|
|
|
Copyright (c) 1985 - 1999, Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
context.h
|
|
|
|
Abstract:
|
|
|
|
This file defines the Input Context Class.
|
|
|
|
Author:
|
|
|
|
Revision History:
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
|
|
#ifndef _CONTEXT_H_
|
|
#define _CONTEXT_H_
|
|
|
|
#include "imclock2.h"
|
|
#include "template.h"
|
|
#include "delay.h"
|
|
#include "ctxtlist.h"
|
|
#include "imccomp.h"
|
|
|
|
const HIMC DEFAULT_HIMC = (HIMC)-2;
|
|
|
|
class CInputContext : public DIMM_IMCLock,
|
|
public DIMM_InternalIMCCLock
|
|
{
|
|
public:
|
|
CInputContext();
|
|
virtual ~CInputContext();
|
|
|
|
BOOL _IsDefaultContext(IN HIMC hIMC) {
|
|
return hIMC == _hDefaultIMC ? TRUE : FALSE;
|
|
}
|
|
|
|
/*
|
|
* AIMM Input Context (hIMC) API Methods.
|
|
*/
|
|
HRESULT CreateContext(IN DWORD dwPrivateSize, BOOL fUnicode, OUT HIMC *phIMC, IN BOOL fCiceroActivated, DWORD fdwInitConvMode = 0, BOOL fInitOpen = FALSE);
|
|
HRESULT DestroyContext(IN HIMC hIMC);
|
|
HRESULT AssociateContext(IN HWND, IN HIMC, OUT HIMC *phPrev);
|
|
HRESULT AssociateContextEx(IN HWND, IN HIMC, IN DWORD);
|
|
HRESULT GetContext(IN HWND, OUT HIMC*);
|
|
HRESULT GetIMCLockCount(IN HIMC, OUT DWORD*);
|
|
|
|
/*
|
|
* AIMM Input Context Components (hIMCC) API Methods.
|
|
*/
|
|
HRESULT CreateIMCC(IN DWORD dwSize, OUT HIMCC *phIMCC);
|
|
HRESULT DestroyIMCC(IN HIMCC hIMCC);
|
|
HRESULT GetIMCCSize(IN HIMCC hIMCC, OUT DWORD *pdwSize);
|
|
HRESULT ReSizeIMCC(IN HIMCC hIMCC, IN DWORD dwSize, OUT HIMCC *phIMCC);
|
|
HRESULT GetIMCCLockCount(IN HIMCC, OUT DWORD*);
|
|
|
|
/*
|
|
* AIMM Open Status API Methods
|
|
*/
|
|
HRESULT GetOpenStatus(IN HIMC);
|
|
HRESULT SetOpenStatus(IN DIMM_IMCLock&, IN BOOL, OUT BOOL*);
|
|
|
|
/*
|
|
* AIMM Conversion Status API Methods
|
|
*/
|
|
HRESULT GetConversionStatus(IN HIMC, OUT LPDWORD, OUT LPDWORD);
|
|
HRESULT SetConversionStatus(IN DIMM_IMCLock&, IN DWORD, IN DWORD, OUT BOOL*, OUT BOOL*, OUT DWORD*, OUT DWORD*);
|
|
|
|
/*
|
|
* AIMM Status Window Pos API Methods
|
|
*/
|
|
HRESULT WINAPI GetStatusWindowPos(IN HIMC, OUT LPPOINT);
|
|
HRESULT SetStatusWindowPos(IN DIMM_IMCLock&, IN LPPOINT);
|
|
|
|
/*
|
|
* AIMM Composition String API Methods
|
|
*/
|
|
HRESULT GetCompositionString(IN DIMM_IMCCLock<COMPOSITIONSTRING_AIMM12>&,
|
|
IN DWORD, IN LONG*&, IN size_t = sizeof(WORD));
|
|
|
|
/*
|
|
* AIMM Composition Font API Methods
|
|
*/
|
|
HRESULT GetCompositionFont(IN DIMM_IMCLock&, OUT LOGFONTAW* lplf, BOOL fUnicode);
|
|
HRESULT SetCompositionFont(IN DIMM_IMCLock&, IN LOGFONTAW* lplf, BOOL fUnicode);
|
|
|
|
/*
|
|
* AIMM Composition Window API Methods
|
|
*/
|
|
HRESULT GetCompositionWindow(IN HIMC, OUT LPCOMPOSITIONFORM);
|
|
HRESULT SetCompositionWindow(IN DIMM_IMCLock&, IN LPCOMPOSITIONFORM);
|
|
|
|
/*
|
|
* AIMM Candidate List API Methods
|
|
*/
|
|
HRESULT GetCandidateList(IN HIMC, IN DWORD dwIndex, IN DWORD dwBufLen, OUT LPCANDIDATELIST lpCandList, OUT UINT* puCopied, BOOL fUnicode);
|
|
HRESULT GetCandidateListCount(IN HIMC, OUT DWORD* lpdwListSize, OUT DWORD* pdwBufLen, BOOL fUnicode);
|
|
|
|
/*
|
|
* AIMM Candidate Window API Methods
|
|
*/
|
|
HRESULT GetCandidateWindow(IN HIMC, IN DWORD, OUT LPCANDIDATEFORM);
|
|
HRESULT SetCandidateWindow(IN DIMM_IMCLock&, IN LPCANDIDATEFORM);
|
|
|
|
/*
|
|
* AIMM Guide Line API Methods
|
|
*/
|
|
HRESULT GetGuideLine(IN HIMC, IN DWORD dwIndex, IN DWORD dwBufLen, OUT CHARAW* pBuf, OUT DWORD* pdwResult, BOOL fUnicode);
|
|
|
|
/*
|
|
* AIMM Notify IME API Method
|
|
*/
|
|
HRESULT NotifyIME(IN HIMC, IN DWORD dwAction, IN DWORD dwIndex, IN DWORD dwValue);
|
|
|
|
/*
|
|
* AIMM Menu Items API Methods
|
|
*/
|
|
HRESULT GetImeMenuItems(IN HIMC, IN DWORD dwFlags, IN DWORD dwType, IN IMEMENUITEMINFOAW *pImeParentMenu, OUT IMEMENUITEMINFOAW *pImeMenu, IN DWORD dwSize, OUT DWORD* pdwResult, BOOL fUnicode);
|
|
|
|
/*
|
|
* Context Methods
|
|
*/
|
|
BOOL ContextLookup(HIMC hIMC, DWORD* pdwProcess, BOOL* pfUnicode = NULL)
|
|
{
|
|
CContextList::CLIENT_IMC_FLAG client_imc;
|
|
BOOL ret = ContextList.Lookup(hIMC, pdwProcess, &client_imc);
|
|
if (ret && pfUnicode)
|
|
*pfUnicode = (client_imc & CContextList::IMCF_UNICODE ? TRUE : FALSE);
|
|
return ret;
|
|
}
|
|
|
|
BOOL ContextLookup(HIMC hIMC, HWND* phImeWnd)
|
|
{
|
|
return ContextList.Lookup(hIMC, phImeWnd);
|
|
}
|
|
|
|
VOID ContextUpdate(HIMC hIMC, HWND& hImeWnd)
|
|
{
|
|
ContextList.Update(hIMC, hImeWnd);
|
|
}
|
|
|
|
BOOL EnumInputContext(DWORD idThread, IMCENUMPROC lpfn, LPARAM lParam);
|
|
|
|
HRESULT ResizePrivateIMCC(IN HIMC hIMC, IN DWORD dwPrivateSize);
|
|
|
|
public:
|
|
BOOL _CreateDefaultInputContext(IN DWORD dwPrivateSize, BOOL fUnicode, BOOL fCiceroActivated);
|
|
BOOL _DestroyDefaultInputContext();
|
|
|
|
void _Init(IActiveIME_Private *pActiveIME)
|
|
{
|
|
Assert(m_pActiveIME == NULL);
|
|
m_pActiveIME = pActiveIME;
|
|
m_pActiveIME->AddRef();
|
|
}
|
|
|
|
public:
|
|
HRESULT UpdateInputContext(IN HIMC hIMC, DWORD dwPrivateSize);
|
|
|
|
public:
|
|
HIMC _GetDefaultHIMC() {
|
|
return _hDefaultIMC;
|
|
}
|
|
|
|
CContextList ContextList; // Context list of client IMC.
|
|
|
|
private:
|
|
HRESULT UpdateIMCC(IN HIMCC* phIMCC, IN DWORD dwRequestSize);
|
|
DWORD BuildHimcList(DWORD idThread, HIMC pHimc[]);
|
|
|
|
HRESULT CreateAImeContext(HIMC hIMC);
|
|
HRESULT DestroyAImeContext(HIMC hIMC);
|
|
|
|
private:
|
|
IActiveIME_Private* m_pActiveIME; // Pointer to IActiveIME interface.
|
|
|
|
HIMC _hDefaultIMC; // Default input context handle.
|
|
|
|
CMap<HWND, // class KEY
|
|
HWND, // class ARG_KEY
|
|
HIMC, // class VALUE
|
|
HIMC // class ARG_VALUE
|
|
> AssociateList;
|
|
};
|
|
|
|
inline CInputContext::CInputContext()
|
|
{
|
|
m_pActiveIME = NULL;
|
|
_hDefaultIMC = NULL;
|
|
}
|
|
|
|
inline CInputContext::~CInputContext(
|
|
)
|
|
{
|
|
SafeRelease(m_pActiveIME);
|
|
}
|
|
|
|
#endif // _CONTEXT_H_
|