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.
|
|
/****************************************************************************
IMCSUB.H
Owner: cslim Copyright (c) 1997-1999 Microsoft Corporation
Subroutines related to HIMC. !!! NEED FULL REVIEW ALL FUNCTIONS NEED TO USE AND WORKS CORRECTLY !!! History: 21-JUL-1999 cslim Created(Borrowed almost part from KKIME) *****************************************************************************/
#if !defined (_IMCSUB_H__INCLUDED_)
#define _IMCSUB_H__INCLUDED_
#include "ipoint.h"
//////////////////////////////////////////////////////////////////////////////
// IME private data for each context
typedef struct tagIMCPRIVATE { HIMC hIMC; // DWORD fdwImeMsg; // what messages should be generated
// DWORD dwCompChar; // wParam of WM_IME_COMPOSITION
// DWORD dwCmpltChar; // wParam of WM_IME_COMPOSITION with GCS_RESULTSTR
// DWORD fdwGcsFlag; // lParam for WM_IME_COMPOSITION
IImeIPoint1* pIPoint; CIMECtx* pImeCtx; // same as pIPoint->GetImeCtx(x)
} IMCPRIVATE ; typedef IMCPRIVATE *PIMCPRIVATE; typedef IMCPRIVATE *LPIMCPRIVATE;
/*
typedef struct tagIMCPRIVATE { HIMC hIMC; IImeKbd* pImeKbd; IImeIPoint* pIPoint; IImeConvert* pConvert; IImePadInternal* pImePad; IMECtx* pImeCtx; // same as pIPoint->GetImeCtx( x )
} IMCPRIVATE; */
PUBLIC VOID SetPrivateBuffer(HIMC hIMC, VOID* pv, DWORD dwSize); PUBLIC BOOL CloseInputContext(HIMC hIMC);
//////////////////////////////////////////////////////////////////////////////
// Inline functions
PUBLIC CIMECtx* GetIMECtx(HIMC hIMC); // in api.cpp
// CIMCPriv class Handle IME Private buffer
class CIMCPriv { public: CIMCPriv() { m_hIMC = NULL; m_inputcontext = NULL; m_priv = NULL; } CIMCPriv(HIMC hIMC); ~CIMCPriv() { UnLockIMC(); }
public: BOOL LockIMC(HIMC hIMC); void UnLockIMC(); void ResetPrivateBuffer();
operator LPIMCPRIVATE() { return m_priv; } LPIMCPRIVATE operator->() { AST(m_priv != NULL); return m_priv; }
private: HIMC m_hIMC; LPINPUTCONTEXT m_inputcontext; LPIMCPRIVATE m_priv; };
//
// Inline functions
//
inline CIMCPriv::CIMCPriv(HIMC hIMC) { AST(hIMC != NULL); m_hIMC = NULL; m_inputcontext = NULL; m_priv = NULL;
LockIMC(hIMC); }
inline BOOL CIMCPriv::LockIMC(HIMC hIMC) { if (hIMC != NULL) { m_hIMC = hIMC; m_inputcontext = (LPINPUTCONTEXT)OurImmLockIMC(hIMC); if (m_inputcontext) { // hIMC->hPrivate was not allocated properly. e.g ImeSelect(TRUE)was not called.
if (OurImmGetIMCCSize(m_inputcontext->hPrivate) != sizeof(IMCPRIVATE)) return fFalse;
m_priv = (LPIMCPRIVATE)OurImmLockIMCC(m_inputcontext->hPrivate); } }
return (hIMC != NULL && m_priv != NULL); }
inline void CIMCPriv::UnLockIMC() { if (m_hIMC != NULL && m_inputcontext != NULL) { OurImmUnlockIMCC(m_inputcontext->hPrivate); OurImmUnlockIMC(m_hIMC); } }
inline void CIMCPriv::ResetPrivateBuffer() { AST(m_hIMC != NULL); if (m_inputcontext && m_priv) { m_priv->hIMC = (HIMC)0; } }
__inline IImeIPoint1* GetImeIPoint(HIMC hIMC) { CIMCPriv ImcPriv; if (ImcPriv.LockIMC(hIMC) == fFalse) { return NULL; } return ImcPriv->pIPoint; }
#endif // _IMCSUB_H__INCLUDED_
|