/****************************************************************************
	IPOINT.H

	Owner: cslim
	Copyright (c) 1997-1999 Microsoft Corporation

	IImeIPoint1 interface
	
	History:
	20-JUL-1999 cslim       Created
*****************************************************************************/

#if !defined(_IPOINT_H__INCLUDED_)
#define _IPOINT_H__INCLUDED_

#include <objbase.h>
#include "ipoint1.h"
#include "imc.h"

class CIImeIPoint : public IImeIPoint1
{
// Ctor and Dtor
public:
	CIImeIPoint();
	~CIImeIPoint();

// IImePoint1 Methods
public:
	STDMETHODIMP QueryInterface(THIS_ REFIID riid, LPVOID * ppvObj);
	STDMETHODIMP_(ULONG) AddRef(VOID);
	STDMETHODIMP_(ULONG) Release(VOID);
	
	STDMETHODIMP InsertImeItem		(IPCANDIDATE* pImeItem, INT iPos, DWORD *lpdwCharId);
	STDMETHODIMP ReplaceImeItem		(INT iPos, INT iTargetLen, IPCANDIDATE* pImeItem, DWORD *lpdwCharId);
	STDMETHODIMP InsertStringEx		(WCHAR* pwSzInsert, INT cchSzInsert, DWORD *lpdwCharId);
	STDMETHODIMP DeleteCompString	(INT	iPos, INT cchSzDel);
	STDMETHODIMP ReplaceCompString	(INT	iPos,
									 INT	iTargetLen, 
									 WCHAR	*pwSzInsert, 
									 INT	cchSzInsert,
									 DWORD	*lpdwCharId);
	STDMETHODIMP ControlIME			(DWORD dwIMEFuncID, LPARAM lpara);
	STDMETHODIMP GetAllCompositionInfo(WCHAR	**ppwSzCompStr,
										DWORD	**ppdwCharID,
										INT		*pcchCompStr,
										INT		*piIPPos,
										INT		*piStartUndetStrPos,
										INT		*pcchUndetStr,
										INT		*piEditStart,
										INT		*piEditLen);
	STDMETHODIMP GetIpCandidate		(DWORD dwCharId,
										IPCANDIDATE **ppImeItem,
										INT *piColumn,
										INT *piCount);
	STDMETHODIMP SelectIpCandidate	(DWORD dwCharId, INT iselno);
	STDMETHODIMP UpdateContext		(BOOL fGenerateMessage);

// Helper functions
public:
	HRESULT Initialize(HIMC hIMC);
	VOID GetImeCtx(VOID** ppImeCtx )
	{
		*ppImeCtx = (VOID*)m_pCIMECtx;
	}

// Internal data
protected:
	ULONG		m_cRef;			// Ref count
	CIMECtx*	m_pCIMECtx;		// IME Input Context handle

	HIMC		m_hIMC;

	// char serial number
	DWORD		m_dwCharNo;
};
typedef CIImeIPoint* LPCImeIPoint;

#endif // _IPOINT_H__INCLUDED_