/**************************************************************************\ * Module Name: softkbd.cpp * * Copyright (c) 1985 - 2000, Microsoft Corporation * * Main functions for Soft Keyboard Component. * * History: * 28-March-2000 weibz Created \**************************************************************************/ #include "private.h" #include "resource.h" #include #include "SoftKbd.h" #include "SoftKbdc.h" #include "SoftkbdIMX.h" #include "regimx.h" #include "catutil.h" #include "mui.h" #include "immxutil.h" #ifdef DEBUG DWORD g_dwThreadDllMain = 0; #endif HINSTANCE g_hInst; // used by COM server HINSTANCE GetServerHINSTANCE(void) { return g_hInst; } BEGIN_COCLASSFACTORY_TABLE DECLARE_COCLASSFACTORY_ENTRY(CLSID_SoftKbd, CSoftKbd, TEXT("SoftKbd Class")) DECLARE_COCLASSFACTORY_ENTRY(CLSID_SoftkbdIMX, CSoftkbdIMX, TEXT("SoftKbdIMX Class")) DECLARE_COCLASSFACTORY_ENTRY(CLSID_SoftkbdRegistry, CSoftkbdRegistry, TEXT("SoftKbdRegistry Class")) END_COCLASSFACTORY_TABLE const GUID c_guidProfile = { /* 0965500c-82f3-49c2-9f00-01c2feacaa0b */ 0x0965500c, 0x82f3, 0x49c2, {0x9f, 0x00, 0x01, 0xc2, 0xfe, 0xac, 0xaa, 0x0b} }; const GUID c_guidProfileSym = { // b2a54871-05f6-4bfc-b97d-0fdf0cbfa57d 0xb2a54871, 0x05f6, 0x4bfc, {0xb9, 0x7d, 0x0f, 0xdf, 0x0c, 0xbf, 0xa5, 0x7d} }; extern REGTIPLANGPROFILE c_rgProf[] = { {0, &GUID_NULL, L"", L"", 0, 0} }; //+--------------------------------------------------------------------------- // // ProcessAttach // //---------------------------------------------------------------------------- BOOL ProcessAttach(HINSTANCE hInstance) { if (!g_cs.Init()) return FALSE; CcshellGetDebugFlags(); Dbg_MemInit(TEXT("SOFTKBDIMX"), NULL); g_hInst = hInstance; MuiLoadResource(hInstance, TEXT("softkbd.dll")); return TRUE; } //+--------------------------------------------------------------------------- // // ProcessDettach // //---------------------------------------------------------------------------- void ProcessDettach(HINSTANCE hInstance) { MuiClearResource(); g_cs.Delete(); Dbg_MemUninit(); } ///////////////////////////////////////////////////////////////////////////// // DLL Entry Point extern "C" BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved) { BOOL bRet = TRUE; #ifdef DEBUG g_dwThreadDllMain = GetCurrentThreadId(); #endif switch (dwReason) { case DLL_PROCESS_ATTACH: // // Now real DllEntry point is _DllMainCRTStartup. // _DllMainCRTStartup does not call our DllMain(DLL_PROCESS_DETACH) // if our DllMain(DLL_PROCESS_ATTACH) fails. // So we have to clean this up. // if (!ProcessAttach(hInstance)) { ProcessDettach(hInstance); bRet = FALSE; } break; case DLL_THREAD_ATTACH: break; case DLL_PROCESS_DETACH: ProcessDettach(hInstance); break; case DLL_THREAD_DETACH: break; } #ifdef DEBUG g_dwThreadDllMain = 0; #endif return bRet; } ///////////////////////////////////////////////////////////////////////////// // Used to determine whether the DLL can be unloaded by OLE STDAPI DllCanUnloadNow(void) { return COMBase_DllCanUnloadNow(); } ///////////////////////////////////////////////////////////////////////////// // Returns a class factory to create an object of the requested type STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID* ppv) { return COMBase_DllGetClassObject(rclsid, riid, ppv); } ///////////////////////////////////////////////////////////////////////////// // DllRegisterServer - Adds entries to the system registry STDAPI DllRegisterServer(void) { HRESULT hr = E_FAIL; TFInitLib(); // registers object, typelib and all interfaces in typelib if (COMBase_DllRegisterServer() != S_OK) goto Exit; if (!RegisterTIP(g_hInst, CLSID_SoftkbdIMX, L"On-screen keyboard", c_rgProf)) goto Exit; if ( FAILED(RegisterCategory(CLSID_SoftkbdIMX, GUID_TFCAT_TIP_HANDWRITING, CLSID_SoftkbdIMX))) goto Exit; hr = S_OK; Exit: TFUninitLib( ); return hr; } ///////////////////////////////////////////////////////////////////////////// // DllUnregisterServer - Removes entries from the system registry STDAPI DllUnregisterServer(void) { HRESULT hr=E_FAIL; TFInitLib(); if (COMBase_DllUnregisterServer() != S_OK) goto Exit; if (FAILED(UnregisterCategory(CLSID_SoftkbdIMX, GUID_TFCAT_TIP_HANDWRITING, CLSID_SoftkbdIMX))) goto Exit; if (!UnregisterTIP(CLSID_SoftkbdIMX)) goto Exit; hr=S_OK; Exit: TFUninitLib( ); return hr; }