home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / sdk / com / activexcontrol / basectl / todosvr / doreg.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1997-10-05  |  4.4 KB  |  129 lines

  1. //=--------------------------------------------------------------------------=
  2. // DOReg.Cpp
  3. //=--------------------------------------------------------------------------=
  4. // Copyright 1995-1997 Microsoft Corporation.  All Rights Reserved.
  5. //
  6. // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF 
  7. // ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO 
  8. // THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A 
  9. // PARTICULAR PURPOSE.
  10. //=--------------------------------------------------------------------------=
  11. //
  12. // implementation of registry manipulation functions for DocObject servers
  13. //
  14.  
  15. #include "CDocObj.H"
  16. #include <util.h>
  17.  
  18. // for ASSERT and FAIL
  19. //
  20. SZTHISFILE
  21.  
  22. //=--------------------------------------------------------------------------=
  23. // RegisterDocObject.
  24. //=--------------------------------------------------------------------------=
  25. // This function writes out some values specific to a DocObject. You should
  26. // call this from your RegisterData function. You don't need to do anything
  27. // special for UnregisterData, because the framework already deletes the
  28. // entire <LibraryName>.<ObjectName> and CLSID\<CLSID> keys.
  29. //
  30. // What we add here:
  31. //
  32. // HKEY_CLASSES_ROOT\<LibraryName>.<ObjectName>\DocObject = <MISCDOCOBJ>
  33. // HKEY_CLASSES_ROOT\CLSID\<CLSID>\DocObject = <MISCDOCOBJ>
  34. // HKEY_CLASSES_ROOT\CLSID\<CLSID>\Printable
  35. // HKEY_CLASSES_ROOT\CLSID\<CLSID>\DefaultExtension = <EXT>, <DESCRIPTION>
  36. //
  37. // Parameters:
  38. //    LPCSTR       - [in] Library Name
  39. //    LPCSTR       - [in] Object Name
  40. //    REFCLSID     - [in] CLSID of the object
  41. //    DWORD        - [in] misc DocObject status flags
  42. //    BOOL         - [in] whether IPrint is supported
  43. //    LPCSTR       - [in] default file extension
  44. //    LPCSTR       - [in] file description for File Open, File Save As
  45. //
  46. // Output:
  47. //    BOOL
  48. //
  49. // Notes:
  50. //    - not the most terribly efficient routine.
  51. //
  52. BOOL RegisterDocObject(LPCSTR pszLibName, LPCSTR pszObjectName,
  53.                        REFCLSID riidObject, DWORD dwMiscDocObj,
  54.                        BOOL bPrint, LPCSTR szExt, LPCSTR szDescription)
  55. {
  56.     HKEY    hk, hkSub = NULL;
  57.     char    szTmp[MAX_PATH];
  58.     char    szGuidStr[GUID_STR_LEN];
  59.     DWORD   dwDummy;
  60.     LONG    l;
  61.  
  62.     // HKEY_CLASSES_ROOT\<LibraryName>.<ObjectName>\DocObject = <MISCDOCOBJ>
  63.     //
  64.     lstrcpy(szTmp, pszLibName);
  65.     lstrcat(szTmp, ".");
  66.     lstrcat(szTmp, pszObjectName);
  67.  
  68.     l = RegCreateKeyEx(HKEY_CLASSES_ROOT, szTmp, 0L, "",
  69.                        REG_OPTION_NON_VOLATILE, KEY_READ | KEY_WRITE,
  70.                        NULL, &hk, &dwDummy);
  71.     CLEANUP_ON_ERROR(l);
  72.  
  73.     l = RegCreateKeyEx(hk, "DocObject", 0L, "", REG_OPTION_NON_VOLATILE,
  74.                        KEY_READ | KEY_WRITE, NULL, &hkSub, &dwDummy);
  75.     CLEANUP_ON_ERROR(l);
  76.  
  77.     wsprintf(szTmp, "%d", dwMiscDocObj);
  78.     l = RegSetValueEx(hkSub, NULL, 0, REG_SZ, (BYTE *)szTmp, lstrlen(szTmp) + 1);
  79.     CLEANUP_ON_ERROR(l);
  80.     RegCloseKey(hkSub);
  81.     RegCloseKey(hk);
  82.  
  83.     // HKEY_CLASSES_ROOT\CLSID\<CLSID>\  
  84.     //
  85.     StringFromGuidA(riidObject, szGuidStr);
  86.     wsprintf(szTmp, "CLSID\\%s", szGuidStr);
  87.     l = RegOpenKeyEx(HKEY_CLASSES_ROOT, szTmp, 0, KEY_ALL_ACCESS, &hk);
  88.     if (l != ERROR_SUCCESS) return FALSE;
  89.  
  90.     // create the Printable key, if printing supported.
  91.     //
  92.     if (bPrint)
  93.     {
  94.        l = RegCreateKeyEx(hk, "Printable", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkSub, &dwDummy);
  95.        CLEANUP_ON_ERROR(l);
  96.        RegCloseKey(hkSub);
  97.        hkSub = NULL;
  98.     }
  99.  
  100.     // now set up the DocObject key...
  101.     //
  102.     l = RegCreateKeyEx(hk, "DocObject", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkSub, &dwDummy);
  103.     CLEANUP_ON_ERROR(l);
  104.  
  105.     wsprintf(szTmp, "%d", dwMiscDocObj);
  106.     l = RegSetValueEx(hkSub, NULL, 0, REG_SZ, (BYTE *)szTmp, lstrlen(szTmp) + 1);
  107.     CLEANUP_ON_ERROR(l);
  108.  
  109.     RegCloseKey(hkSub);
  110.     hkSub = NULL;
  111.  
  112.     // now set up the DefaultExtension key
  113.     //
  114.     l = RegCreateKeyEx(hk, "DefaultExtension", 0, "", REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hkSub, &dwDummy);
  115.     CLEANUP_ON_ERROR(l);
  116.  
  117.     wsprintf(szTmp, "%s,%s", szExt, szDescription);
  118.     l = RegSetValueEx(hkSub, NULL, 0, REG_SZ, (BYTE *)szTmp, lstrlen(szTmp) + 1);
  119.     CLEANUP_ON_ERROR(l);
  120.  
  121.   CleanUp:
  122.     if (hk)
  123.         RegCloseKey(hk);
  124.     if (hkSub)
  125.         RegCloseKey(hkSub);
  126.  
  127.     return (l == ERROR_SUCCESS) ? TRUE : FALSE;
  128. }
  129.