ReactOS 0.4.16-dev-329-g9223134
msctfime.cpp File Reference
#include "msctfime.h"
Include dependency graph for msctfime.cpp:

Go to the source code of this file.

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (msctfime)
 
static HRESULT InternalSelectEx (_In_ HIMC hIMC, _In_ BOOL fSelect, _In_ LANGID LangID)
 
HRESULT Inquire (_Out_ LPIMEINFO lpIMEInfo, _Out_ LPWSTR lpszWndClass, _In_ DWORD dwSystemInfoFlags, _In_ HKL hKL)
 
EXTERN_C BOOL WINAPI ImeInquire (_Out_ LPIMEINFO lpIMEInfo, _Out_ LPWSTR lpszWndClass, _In_ DWORD dwSystemInfoFlags)
 
EXTERN_C DWORD WINAPI ImeConversionList (_In_ HIMC hIMC, _In_ LPCWSTR lpSrc, _Out_ LPCANDIDATELIST lpDst, _In_ DWORD dwBufLen, _In_ UINT uFlag)
 
EXTERN_C BOOL WINAPI ImeRegisterWord (_In_ LPCWSTR lpszReading, _In_ DWORD dwStyle, _In_ LPCWSTR lpszString)
 
EXTERN_C BOOL WINAPI ImeUnregisterWord (_In_ LPCWSTR lpszReading, _In_ DWORD dwStyle, _In_ LPCWSTR lpszString)
 
EXTERN_C UINT WINAPI ImeGetRegisterWordStyle (_In_ UINT nItem, _Out_ LPSTYLEBUFW lpStyleBuf)
 
EXTERN_C UINT WINAPI ImeEnumRegisterWord (_In_ REGISTERWORDENUMPROCW lpfnEnumProc, _In_opt_ LPCWSTR lpszReading, _In_ DWORD dwStyle, _In_opt_ LPCWSTR lpszString, _In_opt_ LPVOID lpData)
 
EXTERN_C BOOL WINAPI ImeConfigure (_In_ HKL hKL, _In_ HWND hWnd, _In_ DWORD dwMode, _Inout_opt_ LPVOID lpData)
 
EXTERN_C BOOL WINAPI ImeDestroy (_In_ UINT uReserved)
 
EXTERN_C LRESULT WINAPI ImeEscape (_In_ HIMC hIMC, _In_ UINT uEscape, _Inout_opt_ LPVOID lpData)
 
EXTERN_C BOOL WINAPI ImeProcessKey (_In_ HIMC hIMC, _In_ UINT uVirtKey, _In_ LPARAM lParam, _In_ CONST LPBYTE lpbKeyState)
 
EXTERN_C BOOL WINAPI ImeSelect (_In_ HIMC hIMC, _In_ BOOL fSelect)
 
EXTERN_C BOOL WINAPI ImeSetActiveContext (_In_ HIMC hIMC, _In_ BOOL fFlag)
 
EXTERN_C UINT WINAPI ImeToAsciiEx (_In_ UINT uVirtKey, _In_ UINT uScanCode, _In_ CONST LPBYTE lpbKeyState, _Out_ LPTRANSMSGLIST lpTransMsgList, _In_ UINT fuState, _In_ HIMC hIMC)
 
EXTERN_C BOOL WINAPI NotifyIME (_In_ HIMC hIMC, _In_ DWORD dwAction, _In_ DWORD dwIndex, _In_ DWORD_PTR dwValue)
 
EXTERN_C BOOL WINAPI ImeSetCompositionString (_In_ HIMC hIMC, _In_ DWORD dwIndex, _In_opt_ LPCVOID lpComp, _In_ DWORD dwCompLen, _In_opt_ LPCVOID lpRead, _In_ DWORD dwReadLen)
 
EXTERN_C HRESULT WINAPI CtfImeInquireExW (_Out_ LPIMEINFO lpIMEInfo, _Out_ LPWSTR lpszWndClass, _In_ DWORD dwSystemInfoFlags, _In_ HKL hKL)
 
EXTERN_C BOOL WINAPI CtfImeSelectEx (_In_ HIMC hIMC, _In_ BOOL fSelect, _In_ HKL hKL)
 
EXTERN_C LRESULT WINAPI CtfImeEscapeEx (_In_ HIMC hIMC, _In_ UINT uSubFunc, _Inout_opt_ LPVOID lpData, _In_ HKL hKL)
 
EXTERN_C HRESULT WINAPI CtfImeGetGuidAtom (_In_ HIMC hIMC, _In_ DWORD dwUnknown, _Out_opt_ LPDWORD pdwGuidAtom)
 
EXTERN_C BOOL WINAPI CtfImeIsGuidMapEnable (_In_ HIMC hIMC)
 
EXTERN_C HRESULT WINAPI CtfImeCreateThreadMgr (VOID)
 
EXTERN_C HRESULT WINAPI CtfImeDestroyThreadMgr (VOID)
 
EXTERN_C HRESULT WINAPI CtfImeCreateInputContext (_In_ HIMC hIMC)
 
EXTERN_C HRESULT WINAPI CtfImeDestroyInputContext (_In_ HIMC hIMC)
 
EXTERN_C HRESULT WINAPI CtfImeSetActiveContextAlways (_In_ HIMC hIMC, _In_ BOOL fActive, _In_ HWND hWnd, _In_ HKL hKL)
 
EXTERN_C HRESULT WINAPI CtfImeProcessCicHotkey (_In_ HIMC hIMC, _In_ UINT vKey, _In_ LPARAM lParam)
 
EXTERN_C LRESULT WINAPI CtfImeDispatchDefImeMessage (_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam)
 
EXTERN_C BOOL WINAPI CtfImeIsIME (_In_ HKL hKL)
 
EXTERN_C HRESULT WINAPI CtfImeThreadDetach (VOID)
 
BOOL AttachIME (VOID)
 @implemented
 
VOID DetachIME (VOID)
 @implemented
 
EXTERN_C VOID TFUninitLib (VOID)
 
BOOL ProcessAttach (HINSTANCE hinstDLL)
 @implemented
 
VOID ProcessDetach (HINSTANCE hinstDLL)
 @implemented
 
EXTERN_C BOOL WINAPI DllMain (_In_ HINSTANCE hinstDLL, _In_ DWORD dwReason, _Inout_opt_ LPVOID lpvReserved)
 @implemented
 

Variables

HINSTANCE g_hInst = NULL
 
BOOL g_bWinLogon = FALSE
 
UINT g_uACP = CP_ACP
 
DWORD g_dwOSInfo = 0
 
BOOL gfTFInitLib = FALSE
 
CRITICAL_SECTION g_csLock
 
CDispAttrPropCacheg_pPropCache = NULL
 

Function Documentation

◆ AttachIME()

BOOL AttachIME ( VOID  )

@implemented

Definition at line 898 of file msctfime.cpp.

899{
901}
BOOL RegisterImeClass(VOID)
@implemented
Definition: ui.cpp:1356
BOOL RegisterMSIMEMessage(VOID)
@implemented
Definition: ui.cpp:41

Referenced by ProcessAttach().

◆ CtfImeCreateInputContext()

EXTERN_C HRESULT WINAPI CtfImeCreateInputContext ( _In_ HIMC  hIMC)

Definition at line 739 of file msctfime.cpp.

741{
742 TRACE("(%p)\n", hIMC);
743
744 TLS *pTLS = TLS::GetTLS();
745 if (!pTLS || !pTLS->m_pBridge)
746 return E_OUTOFMEMORY;
747
748 return pTLS->m_pBridge->CreateInputContext(pTLS, hIMC);
749}
HRESULT CreateInputContext(TLS *pTLS, HIMC hIMC)
@implemented
Definition: bridge.cpp:79
Definition: tls.h:14
static TLS * GetTLS()
@implemented
Definition: tls.cpp:32
CicBridge * m_pBridge
Definition: tls.h:19
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define TRACE(s)
Definition: solgame.cpp:4

◆ CtfImeCreateThreadMgr()

EXTERN_C HRESULT WINAPI CtfImeCreateThreadMgr ( VOID  )

Definition at line 666 of file msctfime.cpp.

667{
668 TRACE("()\n");
669
670 TLS *pTLS = TLS::GetTLS();
671 if (!pTLS)
672 return E_OUTOFMEMORY;
673
674 if (!pTLS->m_pBridge)
675 {
676 pTLS->m_pBridge = new(cicNoThrow) CicBridge();
677 if (!pTLS->m_pBridge)
678 return E_OUTOFMEMORY;
679 }
680
681 HRESULT hr = S_OK;
683 {
684 hr = pTLS->m_pBridge->InitIMMX(pTLS);
685 if (SUCCEEDED(hr))
686 {
687 if (!pTLS->m_pThreadMgr)
688 return E_OUTOFMEMORY;
689
690 hr = pTLS->m_pBridge->ActivateIMMX(pTLS, pTLS->m_pThreadMgr);
691 if (FAILED(hr))
692 pTLS->m_pBridge->UnInitIMMX(pTLS);
693 }
694 }
695
696 return hr;
697}
#define cicNoThrow
Definition: cicbase.h:34
HRESULT ActivateIMMX(_Inout_ TLS *pTLS, _Inout_ ITfThreadMgr_P *pThreadMgr)
@implemented
Definition: bridge.cpp:277
BOOL UnInitIMMX(_Inout_ TLS *pTLS)
@implemented
Definition: bridge.cpp:453
HRESULT InitIMMX(_Inout_ TLS *pTLS)
@implemented
Definition: bridge.cpp:386
DWORD m_dwSystemInfoFlags
Definition: tls.h:18
ITfThreadMgr_P * m_pThreadMgr
Definition: tls.h:21
#define IME_SYSINFO_WINLOGON
Definition: immdev.h:409
#define S_OK
Definition: intsafe.h:52
#define SUCCEEDED(hr)
Definition: intsafe.h:50
#define FAILED(hr)
Definition: intsafe.h:51
BOOL g_bWinLogon
Definition: msctfime.cpp:13
HRESULT hr
Definition: shlfolder.c:183

◆ CtfImeDestroyInputContext()

EXTERN_C HRESULT WINAPI CtfImeDestroyInputContext ( _In_ HIMC  hIMC)

Definition at line 757 of file msctfime.cpp.

759{
760 TRACE("(%p)\n", hIMC);
761
762 TLS *pTLS = TLS::PeekTLS();
763 if (!pTLS || !pTLS->m_pBridge)
764 return E_OUTOFMEMORY;
765
766 return pTLS->m_pBridge->DestroyInputContext(pTLS, hIMC);
767}
HRESULT DestroyInputContext(TLS *pTLS, HIMC hIMC)
@implemented
Definition: bridge.cpp:143
static TLS * PeekTLS()
@implemented
Definition: tls.cpp:41

◆ CtfImeDestroyThreadMgr()

EXTERN_C HRESULT WINAPI CtfImeDestroyThreadMgr ( VOID  )

Definition at line 705 of file msctfime.cpp.

706{
707 TRACE("()\n");
708
709 TLS *pTLS = TLS::PeekTLS();
710 if (!pTLS)
711 return E_OUTOFMEMORY;
712
713 if (pTLS->m_pBridge)
714 {
715 pTLS->m_pBridge = new(cicNoThrow) CicBridge();
716 if (!pTLS->m_pBridge)
717 return E_OUTOFMEMORY;
718 }
719
720 if (!pTLS->m_pThreadMgr)
721 return E_OUTOFMEMORY;
722
724 return S_OK;
725
726 HRESULT hr = pTLS->m_pBridge->DeactivateIMMX(pTLS, pTLS->m_pThreadMgr);
727 if (hr == S_OK)
728 pTLS->m_pBridge->UnInitIMMX(pTLS);
729
730 return hr;
731}
HRESULT DeactivateIMMX(_Inout_ TLS *pTLS, _Inout_ ITfThreadMgr_P *pThreadMgr)
@implemented
Definition: bridge.cpp:340

◆ CtfImeDispatchDefImeMessage()

EXTERN_C LRESULT WINAPI CtfImeDispatchDefImeMessage ( _In_ HWND  hWnd,
_In_ UINT  uMsg,
_In_ WPARAM  wParam,
_In_ LPARAM  lParam 
)

Definition at line 832 of file msctfime.cpp.

837{
838 TRACE("(%p, %u, %p, %p)\n", hWnd, uMsg, wParam, lParam);
839
840 TLS *pTLS = TLS::GetTLS();
841 if (pTLS)
842 {
843 if (uMsg == WM_CREATE)
844 ++pTLS->m_cWnds;
845 else if (uMsg == WM_DESTROY)
846 --pTLS->m_cWnds;
847 }
848
849 if (!IsMsImeMessage(uMsg))
850 return 0;
851
852 HKL hKL = ::GetKeyboardLayout(0);
853 if (IS_IME_HKL(hKL))
854 return 0;
855
856 HWND hImeWnd = (HWND)::SendMessageW(hWnd, WM_IME_NOTIFY, 0x17, 0);
857 if (!IsWindow(hImeWnd))
858 return 0;
859
860 return ::SendMessageW(hImeWnd, uMsg, wParam, lParam);
861}
HWND hWnd
Definition: settings.c:17
DWORD m_cWnds
Definition: tls.h:28
WPARAM wParam
Definition: combotst.c:138
LPARAM lParam
Definition: combotst.c:139
HANDLE HWND
Definition: compat.h:19
#define IS_IME_HKL(hKL)
Definition: imm32_undoc.h:20
UINT_PTR HKL
Definition: msctf.idl:143
BOOL IsMsImeMessage(_In_ UINT uMsg)
@implemented
Definition: ui.cpp:26
BOOL WINAPI IsWindow(_In_opt_ HWND)
HKL WINAPI GetKeyboardLayout(_In_ DWORD)
#define WM_IME_NOTIFY
Definition: winuser.h:1833
#define WM_CREATE
Definition: winuser.h:1611
#define WM_DESTROY
Definition: winuser.h:1612
LRESULT WINAPI SendMessageW(_In_ HWND, _In_ UINT, _In_ WPARAM, _In_ LPARAM)

Referenced by CtfImmDispatchDefImeMessage().

◆ CtfImeEscapeEx()

EXTERN_C LRESULT WINAPI CtfImeEscapeEx ( _In_ HIMC  hIMC,
_In_ UINT  uSubFunc,
_Inout_opt_ LPVOID  lpData,
_In_ HKL  hKL 
)

Definition at line 596 of file msctfime.cpp.

601{
602 TRACE("(%p, %u, %p, %p)\n", hIMC, uSubFunc, lpData, hKL);
603
605 return 0;
606
607 TLS *pTLS = TLS::GetTLS();
608 if (!pTLS || !pTLS->m_pBridge)
609 return 0;
610
611 return pTLS->m_pBridge->EscapeKorean(pTLS, hIMC, uSubFunc, lpData);
612}
LRESULT EscapeKorean(TLS *pTLS, HIMC hIMC, UINT uSubFunc, LPVOID lpData)
@implemented
Definition: bridge.cpp:894
#define LOWORD(l)
Definition: pedump.c:82
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_DEFAULT
Definition: nls.h:168
#define LANG_KOREAN
Definition: nls.h:84

◆ CtfImeGetGuidAtom()

EXTERN_C HRESULT WINAPI CtfImeGetGuidAtom ( _In_ HIMC  hIMC,
_In_ DWORD  dwUnknown,
_Out_opt_ LPDWORD  pdwGuidAtom 
)

Definition at line 620 of file msctfime.cpp.

624{
625 TRACE("(%p, 0x%lX, %p)\n", hIMC, dwUnknown, pdwGuidAtom);
626
627 CicIMCLock imcLock(hIMC);
628 if (FAILED(imcLock.m_hr))
629 return imcLock.m_hr;
630
631 CicIMCCLock<CTFIMECONTEXT> imccLock(imcLock.get().hCtfImeContext);
632 if (FAILED(imccLock.m_hr))
633 return imccLock.m_hr;
634
635 if (!imccLock.get().m_pCicIC)
636 return E_OUTOFMEMORY;
637
638 return imccLock.get().m_pCicIC->GetGuidAtom(imcLock, dwUnknown, pdwGuidAtom);
639}

◆ CtfImeInquireExW()

EXTERN_C HRESULT WINAPI CtfImeInquireExW ( _Out_ LPIMEINFO  lpIMEInfo,
_Out_ LPWSTR  lpszWndClass,
_In_ DWORD  dwSystemInfoFlags,
_In_ HKL  hKL 
)

Definition at line 542 of file msctfime.cpp.

547{
548 TRACE("(%p, %p, 0x%lX, %p)\n", lpIMEInfo, lpszWndClass, dwSystemInfoFlags, hKL);
549
550 TLS *pTLS = TLS::GetTLS();
551 if (!pTLS)
552 return E_OUTOFMEMORY;
553
555 {
556 dwSystemInfoFlags |= IME_SYSINFO_WINLOGON;
558 }
559
560 pTLS->m_dwSystemInfoFlags = dwSystemInfoFlags;
561
562 return Inquire(lpIMEInfo, lpszWndClass, dwSystemInfoFlags, hKL);
563}
#define TRUE
Definition: types.h:120
BOOL IsInteractiveUserLogon(VOID)
Definition: misc.cpp:61
HRESULT Inquire(_Out_ LPIMEINFO lpIMEInfo, _Out_ LPWSTR lpszWndClass, _In_ DWORD dwSystemInfoFlags, _In_ HKL hKL)
Definition: msctfime.cpp:92

◆ CtfImeIsGuidMapEnable()

EXTERN_C BOOL WINAPI CtfImeIsGuidMapEnable ( _In_ HIMC  hIMC)

Definition at line 647 of file msctfime.cpp.

649{
650 TRACE("(%p)\n", hIMC);
651
652 BOOL ret = FALSE;
653 CicIMCLock imcLock(hIMC);
654 if (SUCCEEDED(imcLock.m_hr))
655 ret = !!(imcLock.get().fdwInit & INIT_GUIDMAP);
656
657 return ret;
658}
#define FALSE
Definition: types.h:117
unsigned int BOOL
Definition: ntddk_ex.h:94
#define INIT_GUIDMAP
Definition: immdev.h:179
int ret

◆ CtfImeIsIME()

EXTERN_C BOOL WINAPI CtfImeIsIME ( _In_ HKL  hKL)

Definition at line 869 of file msctfime.cpp.

871{
872 TRACE("(%p)\n", hKL);
873
874 if (IS_IME_HKL(hKL))
875 return TRUE;
876
877 TLS *pTLS = TLS::GetTLS();
878 if (!pTLS || !pTLS->m_pProfile)
879 return FALSE;
880
881 // The return value of CicProfile::IsIME is brain-damaged
882 return !pTLS->m_pProfile->IsIME(hKL);
883}
BOOL IsIME(HKL hKL)
Definition: profile.cpp:177
CicProfile * m_pProfile
Definition: tls.h:20

Referenced by CtfAImmIsIME().

◆ CtfImeProcessCicHotkey()

EXTERN_C HRESULT WINAPI CtfImeProcessCicHotkey ( _In_ HIMC  hIMC,
_In_ UINT  vKey,
_In_ LPARAM  lParam 
)

Definition at line 795 of file msctfime.cpp.

799{
800 TRACE("(%p, %u, %p)\n", hIMC, vKey, lParam);
801
802 TLS *pTLS = TLS::GetTLS();
803 if (!pTLS)
804 return S_OK;
805
806 HRESULT hr = S_OK;
807 ITfThreadMgr *pThreadMgr = NULL;
808 ITfThreadMgr_P *pThreadMgr_P = NULL;
809 if ((TF_GetThreadMgr(&pThreadMgr) == S_OK) &&
810 (pThreadMgr->QueryInterface(IID_ITfThreadMgr_P, (void**)&pThreadMgr_P) == S_OK) &&
812 {
813 HRESULT hr2;
814 if (SUCCEEDED(pThreadMgr_P->CallImm32HotkeyHandler(vKey, lParam, &hr2)))
815 hr = hr2;
816 }
817
818 if (pThreadMgr)
819 pThreadMgr->Release();
820 if (pThreadMgr_P)
821 pThreadMgr_P->Release();
822
823 return hr;
824}
BOOL WINAPI CtfImmIsCiceroStartedInThread(VOID)
Definition: ctf.c:781
#define NULL
Definition: types.h:112
HRESULT QueryInterface([in] REFIID riid, [out, iid_is(riid)] void **ppvObject)
ULONG Release()
nsrefcnt Release()
HRESULT WINAPI TF_GetThreadMgr(ITfThreadMgr **pptim)
Definition: msctf.c:628

Referenced by ImmProcessKey().

◆ CtfImeSelectEx()

EXTERN_C BOOL WINAPI CtfImeSelectEx ( _In_ HIMC  hIMC,
_In_ BOOL  fSelect,
_In_ HKL  hKL 
)

Definition at line 571 of file msctfime.cpp.

575{
576 TRACE("(%p, %d, %p)\n", hIMC, fSelect, hKL);
577
578 TLS *pTLS = TLS::PeekTLS();
579 if (!pTLS)
580 return E_OUTOFMEMORY;
581
582 InternalSelectEx(hIMC, fSelect, LOWORD(hKL));
583
584 if (!pTLS->m_pBridge || !pTLS->m_pThreadMgr)
585 return E_OUTOFMEMORY;
586
587 return pTLS->m_pBridge->SelectEx(pTLS, pTLS->m_pThreadMgr, hIMC, fSelect, hKL);
588}
HRESULT SelectEx(_Inout_ TLS *pTLS, _Inout_ ITfThreadMgr_P *pThreadMgr, _In_ HIMC hIMC, _In_ BOOL fSelect, _In_ HKL hKL)
Definition: bridge.cpp:210
static HRESULT InternalSelectEx(_In_ HIMC hIMC, _In_ BOOL fSelect, _In_ LANGID LangID)
Definition: msctfime.cpp:23

◆ CtfImeSetActiveContextAlways()

EXTERN_C HRESULT WINAPI CtfImeSetActiveContextAlways ( _In_ HIMC  hIMC,
_In_ BOOL  fActive,
_In_ HWND  hWnd,
_In_ HKL  hKL 
)

Definition at line 775 of file msctfime.cpp.

780{
781 TRACE("(%p, %d, %p, %p)\n", hIMC, fActive, hWnd, hKL);
782
783 TLS *pTLS = TLS::GetTLS();
784 if (!pTLS || !pTLS->m_pBridge)
785 return E_OUTOFMEMORY;
786 return pTLS->m_pBridge->SetActiveContextAlways(pTLS, hIMC, fActive, hWnd, hKL);
787}
HRESULT SetActiveContextAlways(TLS *pTLS, HIMC hIMC, BOOL fActive, HWND hWnd, HKL hKL)
Definition: bridge.cpp:622

Referenced by ImmSetActiveContext().

◆ CtfImeThreadDetach()

EXTERN_C HRESULT WINAPI CtfImeThreadDetach ( VOID  )

Definition at line 891 of file msctfime.cpp.

892{
893 ImeDestroy(0);
894 return S_OK;
895}
EXTERN_C BOOL WINAPI ImeDestroy(_In_ UINT uReserved)
Definition: msctfime.cpp:317

Referenced by DllMain().

◆ DetachIME()

VOID DetachIME ( VOID  )

@implemented

Definition at line 904 of file msctfime.cpp.

905{
907}
VOID UnregisterImeClass(VOID)
@implemented
Definition: ui.cpp:1396

Referenced by ProcessDetach().

◆ DllMain()

EXTERN_C BOOL WINAPI DllMain ( _In_ HINSTANCE  hinstDLL,
_In_ DWORD  dwReason,
_Inout_opt_ LPVOID  lpvReserved 
)

@implemented

Definition at line 958 of file msctfime.cpp.

962{
963 switch (dwReason)
964 {
966 {
967 TRACE("(%p, %lu, %p)\n", hinstDLL, dwReason, lpvReserved);
968 if (!ProcessAttach(hinstDLL))
969 {
970 ProcessDetach(hinstDLL);
971 return FALSE;
972 }
973 break;
974 }
976 {
977 ProcessDetach(hinstDLL);
978 break;
979 }
981 {
985 break;
986 }
987 }
988 return TRUE;
989}
DWORD dwReason
Definition: misc.cpp:141
static BOOL InternalDestroyTLS()
@implemented
Definition: tls.cpp:72
#define DLL_THREAD_DETACH
Definition: compat.h:133
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
static IN DWORD IN LPVOID lpvReserved
EXTERN_C HRESULT WINAPI TF_DllDetachInOther(VOID)
BOOL ProcessAttach(HINSTANCE hinstDLL)
@implemented
Definition: msctfime.cpp:919
EXTERN_C HRESULT WINAPI CtfImeThreadDetach(VOID)
Definition: msctfime.cpp:891
VOID ProcessDetach(HINSTANCE hinstDLL)
@implemented
Definition: msctfime.cpp:940

◆ ImeConfigure()

EXTERN_C BOOL WINAPI ImeConfigure ( _In_ HKL  hKL,
_In_ HWND  hWnd,
_In_ DWORD  dwMode,
_Inout_opt_ LPVOID  lpData 
)

Definition at line 286 of file msctfime.cpp.

291{
292 TRACE("(%p, %p, %lu, %p)\n", hKL, hWnd, dwMode, lpData);
293
294 TLS *pTLS = TLS::GetTLS();
295 if (!pTLS || !pTLS->m_pBridge || !pTLS->m_pThreadMgr)
296 return FALSE;
297
298 auto pBridge = pTLS->m_pBridge;
299 auto pThreadMgr = pTLS->m_pThreadMgr;
300
301 if (dwMode & 0x1)
302 return (pBridge->ConfigureGeneral(pTLS, pThreadMgr, hKL, hWnd) == S_OK);
303
304 if (dwMode & 0x2)
305 return (pBridge->ConfigureRegisterWord(pTLS, pThreadMgr, hKL, hWnd, lpData) == S_OK);
306
307 return FALSE;
308}

◆ ImeConversionList()

EXTERN_C DWORD WINAPI ImeConversionList ( _In_ HIMC  hIMC,
_In_ LPCWSTR  lpSrc,
_Out_ LPCANDIDATELIST  lpDst,
_In_ DWORD  dwBufLen,
_In_ UINT  uFlag 
)

Definition at line 190 of file msctfime.cpp.

196{
197 TRACE("(%p, %s, %p, 0x%lX, %u)\n", hIMC, debugstr_w(lpSrc), lpDst, dwBufLen, uFlag);
198 return 0;
199}
#define debugstr_w
Definition: kernel32.h:32
_In_ HCRYPTHASH _In_ BOOL _In_ DWORD _Inout_ DWORD _In_ DWORD dwBufLen
Definition: wincrypt.h:4246

◆ ImeDestroy()

EXTERN_C BOOL WINAPI ImeDestroy ( _In_ UINT  uReserved)

Definition at line 317 of file msctfime.cpp.

319{
320 TRACE("(%u)\n", uReserved);
321
322 TLS *pTLS = TLS::PeekTLS();
323 if (pTLS)
324 return FALSE;
325
326 if (!pTLS->m_pBridge || !pTLS->m_pThreadMgr)
327 return FALSE;
328
330 return TRUE;
331
332 if (pTLS->m_pBridge->DeactivateIMMX(pTLS, pTLS->m_pThreadMgr) != S_OK)
333 return FALSE;
334
335 return pTLS->m_pBridge->UnInitIMMX(pTLS);
336}

Referenced by CtfImeThreadDetach().

◆ ImeEnumRegisterWord()

EXTERN_C UINT WINAPI ImeEnumRegisterWord ( _In_ REGISTERWORDENUMPROCW  lpfnEnumProc,
_In_opt_ LPCWSTR  lpszReading,
_In_ DWORD  dwStyle,
_In_opt_ LPCWSTR  lpszString,
_In_opt_ LPVOID  lpData 
)

Definition at line 267 of file msctfime.cpp.

273{
274 TRACE("(%p, %s, %lu, %s, %p)\n", lpfnEnumProc, debugstr_w(lpszReading),
275 dwStyle, debugstr_w(lpszString), lpData);
276 return 0;
277}

◆ ImeEscape()

EXTERN_C LRESULT WINAPI ImeEscape ( _In_ HIMC  hIMC,
_In_ UINT  uEscape,
_Inout_opt_ LPVOID  lpData 
)

Definition at line 348 of file msctfime.cpp.

352{
353 TRACE("(%p, %u, %p)\n", hIMC, uEscape, lpData);
354 return 0;
355}

◆ ImeGetRegisterWordStyle()

EXTERN_C UINT WINAPI ImeGetRegisterWordStyle ( _In_ UINT  nItem,
_Out_ LPSTYLEBUFW  lpStyleBuf 
)

Definition at line 249 of file msctfime.cpp.

252{
253 TRACE("(%u, %p)\n", nItem, lpStyleBuf);
254 return 0;
255}

◆ ImeInquire()

EXTERN_C BOOL WINAPI ImeInquire ( _Out_ LPIMEINFO  lpIMEInfo,
_Out_ LPWSTR  lpszWndClass,
_In_ DWORD  dwSystemInfoFlags 
)

Definition at line 171 of file msctfime.cpp.

175{
176 TRACE("(%p, %p, 0x%lX)\n", lpIMEInfo, lpszWndClass, dwSystemInfoFlags);
177 return FALSE;
178}

◆ ImeProcessKey()

EXTERN_C BOOL WINAPI ImeProcessKey ( _In_ HIMC  hIMC,
_In_ UINT  uVirtKey,
_In_ LPARAM  lParam,
_In_ CONST LPBYTE  lpbKeyState 
)

Definition at line 364 of file msctfime.cpp.

369{
370 TRACE("(%p, %u, %p, lpbKeyState)\n", hIMC, uVirtKey, lParam, lpbKeyState);
371
372 TLS *pTLS = TLS::GetTLS();
373 if (!pTLS)
374 return FALSE;
375
376 auto pBridge = pTLS->m_pBridge;
377 auto pThreadMgr = pTLS->m_pThreadMgr;
378 if (!pBridge || !pThreadMgr)
379 return FALSE;
380
381 if (pTLS->m_dwFlags1 & 0x1)
382 {
383 ITfDocumentMgr *pDocMgr = NULL;
384 pThreadMgr->GetFocus(&pDocMgr);
385 if (pDocMgr && !CicBridge::IsOwnDim(pDocMgr))
386 {
387 pDocMgr->Release();
388 return FALSE;
389 }
390
391 if (pDocMgr)
392 pDocMgr->Release();
393 }
394
396 if (((pTLS->m_dwFlags2 & 1) && MsimtfIsGuidMapEnable(hIMC, NULL)) ||
397 ((lParam & (KF_ALTDOWN << 16)) &&
399 IsVKDBEKey(uVirtKey)))
400 {
401 return FALSE;
402 }
403
404 INT nUnknown60 = 0;
405 return pBridge->ProcessKey(pTLS, pThreadMgr, hIMC, uVirtKey, lParam, lpbKeyState, &nUnknown60);
406}
static BOOL IsOwnDim(ITfDocumentMgr *pDocMgr)
@implemented
Definition: bridge.cpp:904
DWORD m_dwFlags2
Definition: tls.h:23
DWORD m_dwFlags1
Definition: tls.h:22
BOOL IsVKDBEKey(_In_ UINT uVirtKey)
@implemented
Definition: misc.cpp:116
BOOL MsimtfIsGuidMapEnable(_In_ HIMC hIMC, _Out_opt_ LPBOOL pbValue)
@implemented
Definition: misc.cpp:107
USHORT LANGID
Definition: mui.h:9
#define LANG_JAPANESE
Definition: nls.h:76
int32_t INT
Definition: typedefs.h:58
_Must_inspect_result_ _In_ WDFUSBDEVICE _In_opt_ WDFREQUEST _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_writes_opt_ NumCharacters PUSHORT _Inout_ PUSHORT _In_ UCHAR _In_opt_ USHORT LangID
Definition: wdfusb.h:1083
#define KF_ALTDOWN
Definition: winuser.h:2452

◆ ImeRegisterWord()

EXTERN_C BOOL WINAPI ImeRegisterWord ( _In_ LPCWSTR  lpszReading,
_In_ DWORD  dwStyle,
_In_ LPCWSTR  lpszString 
)

Definition at line 211 of file msctfime.cpp.

215{
216 TRACE("(%s, 0x%lX, %s)\n", debugstr_w(lpszReading), dwStyle, debugstr_w(lpszString));
217 return FALSE;
218}

◆ ImeSelect()

EXTERN_C BOOL WINAPI ImeSelect ( _In_ HIMC  hIMC,
_In_ BOOL  fSelect 
)

Definition at line 418 of file msctfime.cpp.

421{
422 TRACE("(%p, %u)\n", hIMC, fSelect);
423 return FALSE;
424}

◆ ImeSetActiveContext()

EXTERN_C BOOL WINAPI ImeSetActiveContext ( _In_ HIMC  hIMC,
_In_ BOOL  fFlag 
)

Definition at line 436 of file msctfime.cpp.

439{
440 TRACE("(%p, %u)\n", hIMC, fFlag);
441 return FALSE;
442}

◆ ImeSetCompositionString()

EXTERN_C BOOL WINAPI ImeSetCompositionString ( _In_ HIMC  hIMC,
_In_ DWORD  dwIndex,
_In_opt_ LPCVOID  lpComp,
_In_ DWORD  dwCompLen,
_In_opt_ LPCVOID  lpRead,
_In_ DWORD  dwReadLen 
)

Definition at line 512 of file msctfime.cpp.

519{
520 TRACE("(%p, 0x%lX, %p, 0x%lX, %p, 0x%lX)\n", hIMC, dwIndex, lpComp, dwCompLen,
521 lpRead, dwReadLen);
522
523 TLS *pTLS = TLS::GetTLS();
524 if (!pTLS)
525 return FALSE;
526
527 auto pBridge = pTLS->m_pBridge;
528 auto pThreadMgr = pTLS->m_pThreadMgr;
529 if (!pBridge || !pThreadMgr)
530 return FALSE;
531
532 return pBridge->SetCompositionString(pTLS, pThreadMgr, hIMC, dwIndex,
533 lpComp, dwCompLen, lpRead, dwReadLen);
534}

◆ ImeToAsciiEx()

EXTERN_C UINT WINAPI ImeToAsciiEx ( _In_ UINT  uVirtKey,
_In_ UINT  uScanCode,
_In_ CONST LPBYTE  lpbKeyState,
_Out_ LPTRANSMSGLIST  lpTransMsgList,
_In_ UINT  fuState,
_In_ HIMC  hIMC 
)

Definition at line 451 of file msctfime.cpp.

458{
459 TRACE("(%u, %u, %p, %p, %u, %p)\n", uVirtKey, uScanCode, lpbKeyState, lpTransMsgList,
460 fuState, hIMC);
461
462 TLS *pTLS = TLS::GetTLS();
463 if (!pTLS)
464 return 0;
465
466 auto pBridge = pTLS->m_pBridge;
467 auto pThreadMgr = pTLS->m_pThreadMgr;
468 if (!pBridge || !pThreadMgr)
469 return 0;
470
471 UINT ret = 0;
472 HRESULT hr = pBridge->ToAsciiEx(pTLS, pThreadMgr, uVirtKey, uScanCode, lpbKeyState,
473 lpTransMsgList, fuState, hIMC, &ret);
474 return ((hr == S_OK) ? ret : 0);
475}
unsigned int UINT
Definition: ndis.h:50

◆ ImeUnregisterWord()

EXTERN_C BOOL WINAPI ImeUnregisterWord ( _In_ LPCWSTR  lpszReading,
_In_ DWORD  dwStyle,
_In_ LPCWSTR  lpszString 
)

Definition at line 230 of file msctfime.cpp.

234{
235 TRACE("(%s, 0x%lX, %s)\n", debugstr_w(lpszReading), dwStyle, debugstr_w(lpszString));
236 return FALSE;
237}

◆ Inquire()

HRESULT Inquire ( _Out_ LPIMEINFO  lpIMEInfo,
_Out_ LPWSTR  lpszWndClass,
_In_ DWORD  dwSystemInfoFlags,
_In_ HKL  hKL 
)

Retrieves the IME information. @implemented

Definition at line 92 of file msctfime.cpp.

97{
98 if (!lpIMEInfo)
99 return E_OUTOFMEMORY;
100
101 StringCchCopyW(lpszWndClass, 64, L"MSCTFIME UI");
102 lpIMEInfo->dwPrivateDataSize = 0;
103
104 switch (LOWORD(hKL)) // Language ID
105 {
106 case MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT): // Japanese
107 {
108 lpIMEInfo->fdwProperty = IME_PROP_COMPLETE_ON_UNSELECT | IME_PROP_SPECIAL_UI |
111 lpIMEInfo->fdwConversionCaps = IME_CMODE_FULLSHAPE | IME_CMODE_KATAKANA |
113 lpIMEInfo->fdwSentenceCaps = IME_SMODE_CONVERSATION | IME_SMODE_PLAURALCLAUSE;
114 lpIMEInfo->fdwSelectCaps = SELECT_CAP_SENTENCE | SELECT_CAP_CONVERSION;
115 lpIMEInfo->fdwSCSCaps = SCS_CAP_SETRECONVERTSTRING | SCS_CAP_MAKEREAD |
117 lpIMEInfo->fdwUICaps = UI_CAP_ROT90;
118 break;
119 }
120 case MAKELANGID(LANG_KOREAN, SUBLANG_DEFAULT): // Korean
121 {
122 lpIMEInfo->fdwProperty = IME_PROP_COMPLETE_ON_UNSELECT | IME_PROP_SPECIAL_UI |
125 lpIMEInfo->fdwConversionCaps = IME_CMODE_FULLSHAPE | IME_CMODE_NATIVE;
126 lpIMEInfo->fdwSentenceCaps = 0;
127 lpIMEInfo->fdwSCSCaps = SCS_CAP_SETRECONVERTSTRING | SCS_CAP_COMPSTR;
128 lpIMEInfo->fdwSelectCaps = SELECT_CAP_CONVERSION;
129 lpIMEInfo->fdwUICaps = UI_CAP_ROT90;
130 break;
131 }
132 case MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED): // Simplified Chinese
133 case MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL): // Traditional Chinese
134 {
135 lpIMEInfo->fdwProperty = IME_PROP_SPECIAL_UI | IME_PROP_AT_CARET |
137 lpIMEInfo->fdwConversionCaps = IME_CMODE_FULLSHAPE | IME_CMODE_NATIVE;
138 lpIMEInfo->fdwSentenceCaps = SELECT_CAP_CONVERSION;
139 lpIMEInfo->fdwSelectCaps = 0;
140 lpIMEInfo->fdwSCSCaps = SCS_CAP_SETRECONVERTSTRING | SCS_CAP_MAKEREAD |
142 lpIMEInfo->fdwUICaps = UI_CAP_ROT90;
143 break;
144 }
145 default: // Otherwise
146 {
147 lpIMEInfo->fdwProperty = IME_PROP_UNICODE | IME_PROP_AT_CARET;
148 lpIMEInfo->fdwConversionCaps = 0;
149 lpIMEInfo->fdwSentenceCaps = 0;
150 lpIMEInfo->fdwSCSCaps = 0;
151 lpIMEInfo->fdwUICaps = 0;
152 lpIMEInfo->fdwSelectCaps = 0;
153 break;
154 }
155 }
156
157 return S_OK;
158}
#define IME_CMODE_KATAKANA
Definition: imm.h:343
#define IME_CMODE_NATIVE
Definition: imm.h:337
#define IME_SMODE_CONVERSATION
Definition: imm.h:361
#define IME_PROP_AT_CARET
Definition: imm.h:246
#define SCS_CAP_COMPSTR
Definition: imm.h:259
#define SELECT_CAP_CONVERSION
Definition: imm.h:264
#define IME_PROP_UNICODE
Definition: imm.h:249
#define SELECT_CAP_SENTENCE
Definition: imm.h:265
#define SCS_CAP_SETRECONVERTSTRING
Definition: imm.h:261
#define IME_PROP_SPECIAL_UI
Definition: imm.h:247
#define IME_SMODE_PLAURALCLAUSE
Definition: imm.h:357
#define SCS_CAP_MAKEREAD
Definition: imm.h:260
#define IME_PROP_COMPLETE_ON_UNSELECT
Definition: imm.h:250
#define IME_CMODE_FULLSHAPE
Definition: imm.h:345
#define UI_CAP_ROT90
Definition: imm.h:254
#define IME_PROP_NEED_ALTKEY
Definition: immdev.h:387
#define IME_PROP_KBD_CHAR_FIRST
Definition: immdev.h:385
#define L(x)
Definition: ntvdm.h:50
#define SUBLANG_CHINESE_TRADITIONAL
Definition: nls.h:208
#define SUBLANG_CHINESE_SIMPLIFIED
Definition: nls.h:209
#define LANG_CHINESE
Definition: nls.h:42
STRSAFEAPI StringCchCopyW(STRSAFE_LPWSTR pszDest, size_t cchDest, STRSAFE_LPCWSTR pszSrc)
Definition: strsafe.h:149

Referenced by CtfImeInquireExW(), and CicInputContext::OnCleanupContext().

◆ InternalSelectEx()

static HRESULT InternalSelectEx ( _In_ HIMC  hIMC,
_In_ BOOL  fSelect,
_In_ LANGID  LangID 
)
static

Selects or unselects the input context. @implemented

Definition at line 23 of file msctfime.cpp.

27{
28 CicIMCLock imcLock(hIMC);
29 if (FAILED(imcLock.m_hr))
30 return imcLock.m_hr;
31
33 {
34 imcLock.get().cfCandForm[0].dwStyle = 0;
35 imcLock.get().cfCandForm[0].dwIndex = (DWORD)-1;
36 }
37
38 if (!fSelect)
39 {
40 imcLock.get().fdwInit &= ~INIT_GUIDMAP;
41 return imcLock.m_hr;
42 }
43
44 if (!imcLock.ClearCand())
45 return imcLock.m_hr;
46
47 // Populate conversion mode
48 if (!(imcLock.get().fdwInit & INIT_CONVERSION))
49 {
50 DWORD dwConv = (imcLock.get().fdwConversion & IME_CMODE_SOFTKBD);
51 if (LangID)
52 {
54 {
56 }
57 else if (PRIMARYLANGID(LangID) != LANG_KOREAN)
58 {
59 dwConv |= IME_CMODE_NATIVE;
60 }
61 }
62 imcLock.get().fdwConversion |= dwConv;
63 imcLock.get().fdwInit |= INIT_CONVERSION;
64 }
65
66 // Populate sentence mode
67 imcLock.get().fdwSentence |= IME_SMODE_PHRASEPREDICT;
68
69 // Populate LOGFONT
70 if (!(imcLock.get().fdwInit & INIT_LOGFONT))
71 {
72 // Get logical font
73 LOGFONTW lf;
74 HDC hDC = ::GetDC(imcLock.get().hWnd);
76 ::GetObjectW(hFont, sizeof(LOGFONTW), &lf);
77 ::ReleaseDC(imcLock.get().hWnd, hDC);
78
79 imcLock.get().lfFont.W = lf;
80 imcLock.get().fdwInit |= INIT_LOGFONT;
81 }
82 imcLock.get().lfFont.W.lfCharSet = GetCharsetFromLangId(LangID);
83
84 imcLock.InitContext();
85
86 return imcLock.m_hr;
87}
static HDC hDC
Definition: 3dtext.c:33
HFONT hFont
Definition: main.c:53
BYTE GetCharsetFromLangId(_In_ DWORD dwValue)
Definition: misc.cpp:84
unsigned long DWORD
Definition: ntddk_ex.h:95
#define IME_CMODE_ROMAN
Definition: imm.h:346
#define IME_CMODE_SOFTKBD
Definition: imm.h:349
#define IME_SMODE_PHRASEPREDICT
Definition: imm.h:360
#define INIT_LOGFONT
Definition: immdev.h:176
#define INIT_CONVERSION
Definition: immdev.h:174
if(dx< 0)
Definition: linetemp.h:194
static HDC
Definition: imagelist.c:88
#define DWORD
Definition: nt_native.h:44
#define OBJ_FONT
Definition: objidl.idl:1414
#define PRIMARYLANGID(l)
Definition: nls.h:16
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
Definition: dc.c:428
int WINAPI ReleaseDC(_In_opt_ HWND, _In_ HDC)
HDC WINAPI GetDC(_In_opt_ HWND)

Referenced by CtfImeSelectEx().

◆ NotifyIME()

EXTERN_C BOOL WINAPI NotifyIME ( _In_ HIMC  hIMC,
_In_ DWORD  dwAction,
_In_ DWORD  dwIndex,
_In_ DWORD_PTR  dwValue 
)

Definition at line 484 of file msctfime.cpp.

489{
490 TRACE("(%p, 0x%lX, 0x%lX, %p)\n", hIMC, dwAction, dwIndex, dwValue);
491
492 TLS *pTLS = TLS::GetTLS();
493 if (!pTLS)
494 return FALSE;
495
496 auto pBridge = pTLS->m_pBridge;
497 auto pThreadMgr = pTLS->m_pThreadMgr;
498 if (!pBridge || !pThreadMgr)
499 return FALSE;
500
501 HRESULT hr = pBridge->Notify(pTLS, pThreadMgr, hIMC, dwAction, dwIndex, dwValue);
502 return (hr == S_OK);
503}

◆ ProcessAttach()

BOOL ProcessAttach ( HINSTANCE  hinstDLL)

@implemented

Definition at line 919 of file msctfime.cpp.

920{
921 g_hInst = hinstDLL;
922
924
925 if (!TLS::Initialize())
926 return FALSE;
927
929
931
932 if (!TFInitLib())
933 return FALSE;
934
936 return AttachIME();
937}
EXTERN_C void cicGetOSInfo(LPUINT puACP, LPDWORD pdwOSInfo)
Definition: cicbase.cpp:82
EXTERN_C BOOL TFInitLib(FN_CoCreateInstance fnCoCreateInstance)
Definition: cicbase.cpp:251
void cicInitUIFLib(void)
Definition: cicuif.cpp:5459
static BOOL Initialize()
@implemented
Definition: tls.cpp:15
DWORD g_dwOSInfo
Definition: msctfime.cpp:15
BOOL AttachIME(VOID)
@implemented
Definition: msctfime.cpp:898
UINT g_uACP
Definition: msctfime.cpp:14
CRITICAL_SECTION g_csLock
Definition: msctfime.cpp:17
BOOL gfTFInitLib
Definition: msctfime.cpp:16
HINSTANCE g_hInst
Definition: msctfime.cpp:12
BOOL WINAPI InitializeCriticalSectionAndSpinCount(OUT LPCRITICAL_SECTION lpCriticalSection, IN DWORD dwSpinCount)
Definition: synch.c:765

Referenced by DllMain().

◆ ProcessDetach()

VOID ProcessDetach ( HINSTANCE  hinstDLL)

@implemented

Definition at line 940 of file msctfime.cpp.

941{
943
944 if (gfTFInitLib)
945 {
946 DetachIME();
947 TFUninitLib();
948 }
949
954}
void cicDoneUIFLib(void)
Definition: cicuif.cpp:5466
static VOID Uninitialize()
@implemented
Definition: tls.cpp:22
EXTERN_C VOID TFUninitLib(VOID)
Definition: msctfime.cpp:909
VOID DetachIME(VOID)
@implemented
Definition: msctfime.cpp:904
void WINAPI DeleteCriticalSection(PCRITICAL_SECTION)

Referenced by DllMain().

◆ TFUninitLib()

EXTERN_C VOID TFUninitLib ( VOID  )

Definition at line 909 of file msctfime.cpp.

910{
911 if (g_pPropCache)
912 {
913 delete g_pPropCache;
915 }
916}
CDispAttrPropCache * g_pPropCache
Definition: msctfime.cpp:18

Referenced by ProcessDetach().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( msctfime  )

Variable Documentation

◆ g_bWinLogon

BOOL g_bWinLogon = FALSE

Definition at line 13 of file msctfime.cpp.

Referenced by CtfImeCreateThreadMgr(), and CtfImeInquireExW().

◆ g_csLock

CRITICAL_SECTION g_csLock

Definition at line 17 of file msctfime.cpp.

Referenced by InitDisplayAttrbuteLib(), ProcessAttach(), and ProcessDetach().

◆ g_dwOSInfo

DWORD g_dwOSInfo = 0

Definition at line 15 of file msctfime.cpp.

Referenced by ProcessAttach().

◆ g_hInst

HINSTANCE g_hInst = NULL

Definition at line 12 of file msctfime.cpp.

Referenced by ProcessAttach().

◆ g_pPropCache

CDispAttrPropCache* g_pPropCache = NULL

Definition at line 18 of file msctfime.cpp.

Referenced by InitDisplayAttrbuteLib(), and TFUninitLib().

◆ g_uACP

UINT g_uACP = CP_ACP

Definition at line 14 of file msctfime.cpp.

Referenced by ProcessAttach().

◆ gfTFInitLib

BOOL gfTFInitLib = FALSE

Definition at line 16 of file msctfime.cpp.

Referenced by ProcessAttach(), and ProcessDetach().