Jak stosować kompozycje systemu Windows XP w odniesieniu do dodatków COM pakietu Office

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 830033 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

Podczas tworzenia dodatku COM dla programu pakietu Microsoft Office (na przykład Microsoft Visio) wygląd dodatku jest domyślnie zgodny ze standardowym wyglądem pakietu Office. W przypadku systemu Microsoft Windows XP można jednak wybrać jeden z kilku stylów wizualnych (kompozycji) w celu dostosowania wyglądu programu systemu Microsoft Windows.

Jeżeli kompozycje systemu Windows nie są jawnie włączone dla dodatku COM, wygląd dodatku nie ulega zmianie razem z tymi schematami kolorów, powodując, że dodatek wygląda na przestarzały lub niezsynchronizowany z programem, w którym jest uwzględniony. Korzystając z języków programowania Microsoft Visual C++ lub Microsoft Visual Studio .NET, można włączyć funkcję dostosowania dodatku COM do kompozycji systemu Windows.

Po włączeniu funkcji dostosowania dodatku do kompozycji systemu Windows kompozycje wpływają tylko na wygląd dodatku. Funkcjonowanie dodatku pozostaje bez zmian.

Zastrzeżenie

Firma Microsoft podaje przykłady programowania wyłącznie do celów informacyjnych, bez jakichkolwiek gwarancji wyrażonych wprost lub domyślnie. Dotyczy to także, ale nie ograniczając się do tego zapisu, gwarancji przydatności handlowej lub do określonego celu. W tym artykule zakłada się, że czytelnik zna prezentowany język programowania oraz narzędzia używane do tworzenia i debugowania procedur. Pracownicy Pomocy technicznej firmy Microsoft mogą służyć pomocą, wyjaśniając funkcję konkretnej procedury. Nie będą jednak modyfikować tych przykładów ani dodawać żadnej funkcji i konstruować nowych procedur w celu dostosowania ich do konkretnych potrzeb użytkownika.

Program Microsoft Visual Basic 6.0

Program Visual Basic 6.0 nie obsługuje kompozycji. Dodatki nie mogą być wiązane z kompozycjami przy użyciu programu Visual Basic 6.0.

Program Microsoft Visual C++ 6.0

Aby użyć programu Visual C++ 6.0 do włączenia funkcji dostosowania dodatku COM do kompozycji systemu Windows XP, wykonaj następujące kroki:
  1. Utwórz plik manifestu zawierający następujące informacje. Dostosuj te informacje dla swojego określonego dodatku:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
     <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> 
      <noInherit/>
      <assemblyIdentity 
       processorArchitecture="*" 
       type="win32" 
       name="MyOfficeNetAddin"
       version="1.0.0.0"/>
       <description>My Office Addin built with .Net</description> 
       <dependency optional="yes">                              
        <dependentAssembly>                   
         <assemblyIdentity                 
          type="win32"                
          name="Microsoft.Windows.Common-Controls" 
          version="6.0.1.0"           
          publicKeyToken="6595b64144ccf1df" 
          language="*"                
          processorArchitecture="*"/>
        </dependentAssembly>                  
       </dependency>                             
     </assembly>
    
  2. Wykonaj jeden z następujących kroków:
    • Uwzględnij następującą instrukcję preprocesora:
      #define ISOLATION_AWARE_ENABLED
      
    • Compile with:
      /D ISOLATION_AWARE_ENABLED
      
  3. Dodaj plik manifestu do swojego pliku zasobu w sposób przedstawiony w następującym przykładzie:
    #include "windows.h"
    ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST "mydllname.dl.manifest"
    

Program Microsoft Visual Studio .NET i języki zarządzane

Aby użyć platformy Visual Studio .NET i systemu .NET Framework do włączenia kompozycji systemu Windows XP dla dodatku COM, wykonaj następujące kroki.

Uwaga: W tym przykładzie wykorzystano język C# do włączenia kontekstu uaktywniania zgodnie z kompozycją na formularzu systemu Windows. Ponadto, aby umożliwić stosowanie kompozycji systemu Windows w odniesieniu do przycisków, pól wyboru, przycisków radiowych i pól grupy, należy ustawić właściwość FlatStyle tych obiektów równą System.
  1. Uwzględnij następujące informacje w pliku cs. Dostosuj te informacje dla swojego określonego dodatku:
    using System.Runtime.InteropServices;
    using System;
    using System.Security;
    using System.Security.Permissions;
    using System.Collections;
    using System.IO;
    using System.Text;
    using System.Windows.Forms;
    namespace MyOfficeNetAddin
    {
        /// <devdoc>
        ///     This class is intended to use with the C# 'using' statement in
        ///     to activate an activation context for turning on visual theming at
        ///     the beginning of a scope, and have it automatically deactivated
        ///     when the scope is exited.
        /// </devdoc>
    [ SuppressUnmanagedCodeSecurity ]
    internal class EnableThemingInScope : IDisposable
    {
       // Private data
    	  private uint  cookie;
       private static ACTCTX enableThemingActivationContext;
       private static IntPtr hActCtx;
       private static bool contextCreationSucceeded = false;
       public EnableThemingInScope(bool enable)
       {
       cookie = 0;
       if (enable && OSFeature.Feature.IsPresent(OSFeature.Themes))
       {
        if (EnsureActivateContextCreated())
        {
         if (!ActivateActCtx(hActCtx, out cookie))
         {
             // Be sure cookie always zero if activation failed
             cookie = 0;
         }
        }
       }
      }
      ~EnableThemingInScope()
      {
       Dispose(false);
      }
      void IDisposable.Dispose()
      {
       Dispose(true);
      }
      private void Dispose(bool disposing)
      {
       if (cookie != 0)
       {
        if (DeactivateActCtx(0, cookie))
        {
           // deactivation succeeded...
           cookie = 0;
        }
       }
      }
      private bool EnsureActivateContextCreated()
      {
       lock (typeof(EnableThemingInScope))
       {
        if (!contextCreationSucceeded)
        {
         // Pull manifest from the .NET Framework install
         // directory
         string assemblyLoc = null;
                            
         FileIOPermission fiop = new FileIOPermission(PermissionState.None);
         fiop.AllFiles = FileIOPermissionAccess.PathDiscovery;
         fiop.Assert();
         try
         {
          assemblyLoc = typeof(Object).Assembly.Location;
         }
         finally
         { 
          CodeAccessPermission.RevertAssert();
         }
         string manifestLoc = null;
         string installDir = null;
         if (assemblyLoc != null)
         {
          installDir = Path.GetDirectoryName(assemblyLoc);
          const string manifestName = "XPThemes.manifest";
          manifestLoc = Path.Combine(installDir, manifestName);
         }
         if (manifestLoc != null && installDir != null)
         {
          enableThemingActivationContext = new ACTCTX();
          enableThemingActivationContext.cbSize = Marshal.SizeOf(typeof(ACTCTX));
    	     enableThemingActivationContext.lpSource = manifestLoc;
          // Set the lpAssemblyDirectory to the install
          // directory to prevent Win32 Side by Side from
          // looking for comctl32 in the application
          // directory, which could cause a bogus dll to be
          // placed there and open a security hole.
    	     enableThemingActivationContext.lpAssemblyDirectory = installDir;
    	     enableThemingActivationContext.dwFlags = ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID; 
     
    	     // Note this will fail gracefully if file specified
          // by manifestLoc doesn't exist.
          hActCtx = CreateActCtx(ref enableThemingActivationContext);
          contextCreationSucceeded = (hActCtx != new IntPtr(-1));
         }
        }
        // If we return false, we'll try again on the next call into
        // EnsureActivateContextCreated(), which is fine.
        return contextCreationSucceeded;
       }
      }
      // All the pinvoke goo...
      [DllImport("Kernel32.dll")]
      private extern static IntPtr CreateActCtx(ref ACTCTX actctx);
      [DllImport("Kernel32.dll")]
      private extern static bool ActivateActCtx(IntPtr hActCtx, out uint lpCookie);
      [DllImport("Kernel32.dll")]
      private extern static bool DeactivateActCtx(uint dwFlags, uint lpCookie);
      private const int ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID = 0x004;
                
      private struct ACTCTX 
      {
       public int       cbSize;
       public uint      dwFlags;
       public string    lpSource;
       public ushort    wProcessorArchitecture;
       public ushort    wLangId;
       public string    lpAssemblyDirectory;
       public string    lpResourceName;
       public string    lpApplicationName;
      }
     }
    }
    
  2. Utwórz swój formularz z następującą otoką. Ta procedura wypycha kontekst aktywacji zgodnie z kontekstem przed utworzeniem jakichkolwiek formantów:
    using( new EnableThemingInScope( true ) )
    {
     Form1 form1 = new Form1();
     form1.CreateControl();
    }
    

Materiały referencyjne

Aby uzyskać więcej informacji dotyczących sposobu korzystania ze stylów wizualnych (kompozycji) systemu Windows XP, odwiedź następującą witrynę MSDN firmy Microsoft w sieci Web:
http://msdn2.microsoft.com/en-us/library/ms997646.aspx

Właściwości

Numer ID artykułu: 830033 - Ostatnia weryfikacja: 20 maja 2008 - Weryfikacja: 6.7
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Office Basic 2007
  • Microsoft Office Basic Edition 2003
  • Microsoft Office Professional 2007
  • Microsoft Office Professional Edition 2003
  • Microsoft Office Small Business 2007
  • Microsoft Office Small Business Edition 2003
  • Microsoft Office Standard 2007
  • Microsoft Office Standard Edition 2003
  • Office 2007 dla Uzytkownikow Domowych
  • Microsoft Office Student and Teachers Edition 2003
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Office FrontPage 2003
  • Microsoft Office Outlook 2007
  • Microsoft Office Outlook 2003
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft Office Project Professional 2007
  • Microsoft Office Project Professional 2003
  • Microsoft Office Project Standard 2007
  • Microsoft Office Project Standard 2003
  • Microsoft Office Publisher 2007
  • Microsoft Office Publisher 2003
  • Microsoft Office Visio Professional 2007
  • Microsoft Office Visio Professional 2003
  • Microsoft Office Visio Standard 2007
  • Microsoft Office Visio Standard 2003
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
Słowa kluczowe: 
kbprogramming kbcode kbhowtomaster KB830033

Przekaż opinię

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com