現在オフラインです。再接続するためにインターネットの接続を待っています

Office COM アドインに Windows XP テーマを適用する方法

Office 2003 のサポートは終了しました

マイクロソフトでは、2014 年 4 月 8 日に Office 2003 のサポートを終了しました。この変更は、ソフトウェアの更新プログラムおよびセキュリティ オプションに影響しています。 この変更の意味および保護された状態を維持する方法について説明します。

概要
Microsoft Visio などの Microsoft Office プログラムに対応した COM アドインを作成すると、アドインの外観は、デフォルトで Office の標準的な外観に準拠します。ただし、Microsoft Windows XP では、数多くの視覚スタイル (テーマ) から視覚スタイルを選択し、Microsoft Windows プログラムの外観をカスタマイズすることができます。

COM アドインで Windows テーマを明示的に有効に設定しない場合、アドインの外観 (配色) は変更されず、プログラムに含まれる古い (同期していない) 配色がアドインで使用されます。Microsoft Visual C++ や Microsoft Visual Studio .NET などの言語を使用すると、COM アドインで Windows テーマを有効にすることができます。

アドインで Windows テーマを有効にすると、そのテーマはアドインの外観のみに影響を及ぼします。アドインの機能には影響を及ぼしません。

先頭に戻る

免責

マイクロソフトは、この情報をプログラミング言語の使用方法の一例として提供するだけであり、市場性および特定目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。この資料は、例示されているプログラミング言語やプロシージャの作成およびデバッグに使用するツールについて理解されているユーザーを対象としています。Microsoft Support 担当者は、特定のプロシージャの機能についての問い合わせにはお答えできますが、ユーザー固有の目的に合わせた機能の追加、プロシージャの作成などの内容変更は行っておりません。先頭に戻る

Microsoft Visual Basic 6.0

Visual Basic 6.0 は、テーマをサポートしていません。Visual Basic 6.0 を使用して、アドインにテーマを設定することはできません。

先頭に戻る

Microsoft Visual C++ 6.0

Visual C++ 6.0 を使用して COM アドインの Windows テーマを有効にするには、以下の手順を実行します。
  1. 以下の情報を含むマニフェスト ファイルを作成します。特定のアドイン用に情報をカスタマイズします。
    <?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. 以下のいずれかの手順を実行します。
    • 次のプリプロセッサ命令を追加します。
      #define ISOLATION_AWARE_ENABLED
    • 次のコマンドを使用して、コンパイルを実行します。
      /D ISOLATION_AWARE_ENABLED
  3. 以下の例に示すように、リソース ファイルにマニフェスト ファイルを追加します。
    #include "windows.h"ISOLATIONAWARE_MANIFEST_RESOURCE_ID RT_MANIFEST "mydllname.dl.manifest"
先頭に戻る

Microsoft Visual Studio .NET とマネージ言語

Visual Studio .NET と .NET Framework を使用して COM アドインの Windows XP テーマを有効にするには、以下の手順を実行します。

: この例では、C# を使用して、Windows フォーム上でのテーマのアクティブ化コンテキストを有効にします。同様に、ボタン、チェック ボックス、ラジオ ボタン、およびグループ ボックスで Windows テーマを有効にするには、対象となるオブジェクトの FlatStyle プロパティが System に設定されている必要があります。
  1. .cs ファイルに、以下の情報を含めます。特定のアドイン用に情報をカスタマイズします。
    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. 次のラッパーを使用して、フォームを作成します。このプロシージャでは、コントロールを作成する前に、テーマが有効になったアクティブ化コンテキストがプッシュされます。
    using( new EnableThemingInScope( true ) ){ Form1 form1 = new Form1(); form1.CreateControl();}
先頭に戻る
関連情報
Windows XP の視覚スタイル (テーマ) の詳細については、次のマイクロソフトの MSDN Web サイトを参照してください。先頭に戻る
プロパティ

文書番号:830033 - 最終更新日: 12/15/2005 08:40:36 - リビジョン: 5.5

  • Microsoft Office 2003, All Editions
  • Microsoft Office Access 2003
  • Microsoft Office Excel 2003
  • Microsoft Office FrontPage 2003
  • Microsoft Office Outlook 2003
  • Microsoft Office PowerPoint 2003
  • Microsoft Office Project Professional 2003
  • Microsoft Office Project Standard 2003
  • Microsoft Office Publisher 2003
  • Microsoft Office Visio Standard 2003
  • Microsoft Office Visio Professional 2003
  • Microsoft Office Word 2003
  • kbprogramming kbcode kbhowtomaster KB830033
フィードバック