Office COM 추가 기능에 Windows XP 테마를 적용하는 방법

기술 자료 번역 기술 자료 번역
기술 자료: 830033 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

Microsoft Visio와 같은 Microsoft Office 프로그램용 COM 추가 기능을 만드는 경우 해당 추가 기능의 모양은 기본적으로 일반적인 Office 모양과 같습니다. 하지만 Microsoft Windows XP를 사용하면 여러 다양한 시각적 스타일이나 테마를 선택하여 Microsoft Windows 프로그램의 모양을 사용자 지정할 수 있습니다.

COM 추가 기능에 Windows 테마가 명시적으로 설정되어 있지 않은 경우 추가 기능의 모양이 이러한 색 구성표로 바뀌지 않으며 추가 기능의 날짜나 동기화 상태가 해당 추가 기능이 포함된 프로그램과 다르게 나타납니다. Microsoft Visual C++ 또는 Microsoft Visual Studio .NET 언어를 사용하여 COM 추가 기능에서 Windows 테마를 선택하도록 설정할 수 있습니다.

추가 기능에 Windows 테마를 설정하면 추가 기능의 모양에만 이 테마가 적용되며 추가 기능의 기능에는 영향을 미치지 않습니다.

고지 사항

Microsoft는 모든 보증(상품, 특정 목적에 대한 적합성 및 비침해에 대한 묵시적인 보증을 포함하며 이에 제한되지 않음)을 배제하며 예를 보여주기 위한 목적으로만 이 프로그래밍 예제를 제공합니다. 본 문서의 내용은 프로시저를 작성하고 디버깅하는 데 사용되는 도구 및 여기서 설명하는 프로그래밍 언어에 익숙한 사용자를 대상으로 합니다. Microsoft 지원 엔지니어는 사용자에게 도움이 되도록 특정 프로시저에 대한 기능을 설명할 수 있지만 사용자의 특정 요구 사항에 맞도록 예제를 수정하여 추가 기능을 제공하거나 프로시저를 구성하지는 않습니다.

Microsoft Visual Basic 6.0

Visual Basic 6.0은 테마를 지원하지 않습니다. Visual Basic 6.0을 사용하여 추가 기능의 테마를 적용할 수 없습니다.

Microsoft Visual C++ 6.0

Visual C++ 6.0을 사용하여 COM 추가 기능에서 Windows XP 테마를 선택하도록 설정하려면 다음과 같이 하십시오.
  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 시각적 스타일(테마) 사용에 대한 자세한 내용을 보려면 다음 Microsoft MSDN 웹 사이트를 참조하십시오.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwxp/html/xptheming.asp(영문)




Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 830033 - 마지막 검토: 2005년 12월 1일 목요일 - 수정: 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

피드백 보내기

 

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