/*++ Copyright (c) 1985 - 1999, Microsoft Corporation Module Name: imewndhd.h Abstract: This file defines the IME window handler Class. Author: Revision History: Notes: --*/ #ifndef _IMEWNDHD_H_ #define _IMEWNDHD_H_ #include "ctxtlist.h" #include "globals.h" extern LPCTSTR IMEWndHandlerName; class CIMEWindowHandler { public: CIMEWindowHandler(HWND hwnd = NULL, BOOL fDefault = FALSE); ~CIMEWindowHandler(); LRESULT ImeWndCreateHandler(DWORD style, HIMC hDefIMC); LRESULT ImeWndCreateHandler(LPCREATESTRUCT lpcs); HIMC ImeGetImc() { return m_imeui.hIMC; } VOID ImeSetWnd(HWND hwnd) { m_imeui.hImeWnd = hwnd; } LRESULT ImeWndProcWorker(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode = TRUE); private: LRESULT _ImeWndProcWorker(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); public: VOID ImeWndFinalDestroyHandler(); private: VOID ImeWndDestroyHandler(); LRESULT ImeSystemHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); LRESULT ImeSelectHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); LRESULT ImeControlHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); LRESULT ImeSetContextHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); LRESULT ImeNotifyHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); LRESULT ImeMsImeHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); LRESULT SendMessageToUI(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode, CActiveIMM* pActiveIMM); LRESULT ImeActivateLayout(HKL hSelKL, CActiveIMM* pActiveIMM); VOID ImeSetImc(HIMC hIMC, CActiveIMM* pActiveIMM); VOID ImeMarkUsedContext(HWND hImeWnd, HIMC hIMC, CActiveIMM* pActiveIMM); BOOL ImeIsUsableContext(HWND hImeWnd, HIMC hIMC, CActiveIMM* pActiveIMM); BOOL ImeBroadCastMsg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL fUnicode); int IsIMEHandler() { return (m_imeui.nCntInIMEProc); } BOOL IsMsImeMessage(UINT uMsg) { if (uMsg == WM_MSIME_SERVICE || uMsg == WM_MSIME_UIREADY || uMsg == WM_MSIME_RECONVERTREQUEST || uMsg == WM_MSIME_RECONVERT || uMsg == WM_MSIME_DOCUMENTFEED || uMsg == WM_MSIME_QUERYPOSITION || uMsg == WM_MSIME_MODEBIAS || uMsg == WM_MSIME_SHOWIMEPAD || uMsg == WM_MSIME_MOUSE || uMsg == WM_MSIME_KEYMAP) return TRUE; else return FALSE; } // // Enumrate callbacks // static ENUM_RET EnumInputContextCallback(HIMC hIMC, CContextList* pList); private: typedef struct tagIMEUI { HWND hImeWnd; HIMC hIMC; LONG nCntInIMEProc; // Non-zero if hwnd has called into ImeWndProc. BOOL fDefault:1; // TRUE if this is the default IME. } IMEUI; IMEUI m_imeui; HKL m_hKL_UnSelect; // Use in ImeActivateLayout() for unselect hKL value. }; CIMEWindowHandler* GetImeWndHandler(HWND hwnd, BOOL fDefault = FALSE); #endif // _IMEWNDHD_H_