비주얼 스타일 활성화
이 항목에서는 일반적인 컨트롤이 사용자의 기본 비주얼 스타일에 표시되도록 애플리케이션을 구성하는 방법에 대해 설명합니다.
이 항목에는 다음 섹션이 포함되어 있습니다.
- 매니페스트 또는 지시문을 사용하여 시각적 스타일을 애플리케이션 적용할 수 있는지 확인
- 표준 확장만 사용하는 애플리케이션에서 ComCtl32.dll 버전 6 사용
- 제어판 또는 RunDll32.exe 실행 중인 DLL에서 ComCtl32 버전 6 사용
- 프로세스 가져온 확장, 플러그 인, MMC 스냅인 또는 DLL에 비주얼 스타일 지원을 추가합니다.
- 비주얼 스타일 해제
- HTML 콘텐츠에 비주얼 스타일 사용
- 비주얼 스타일이 적용되지 않은 경우
- 애플리케이션을 이전 버전의 Windows 호환되도록 만들기
- 관련 항목
매니페스트 또는 지시문을 사용하여 시각적 스타일을 애플리케이션에 적용할 수 있는지 확인
애플리케이션에서 비주얼 스타일을 사용할 수 있도록 하려면 ComCtl32.dll 버전 6 이상을 사용해야 합니다. 버전 6은 재배포할 수 없으므로 애플리케이션이 포함된 Windows 버전에서 실행되는 경우에만 사용할 수 있습니다. Windows는 버전 5와 버전 6을 모두 함께 사용합니다. ComCtl32.dll 버전 6에는 사용자 컨트롤과 공통 컨트롤이 모두 포함되어 있습니다. 기본적으로 애플리케이션은 User32.dll 정의된 사용자 컨트롤과 ComCtl32.dll 버전 5에 정의된 공용 컨트롤을 사용합니다. DLL 버전 및 해당 배포 플랫폼 목록은 Common Control 버전참조하세요.
애플리케이션에서 비주얼 스타일을 사용하려면 사용 가능한 경우 ComCtl32.dll 버전 6을 사용해야 함을 나타내는 애플리케이션 매니페스트 또는 컴파일러 지시문을 추가해야 합니다.
애플리케이션 매니페스트를 사용하면 애플리케이션에서 필요한 어셈블리 버전을 지정할 수 있습니다. Microsoft Win32에서 어셈블리는 DLL 집합 및 해당 DLL 내에 포함된 버전 관리 가능한 개체 목록입니다.
매니페스트는 XML로 작성됩니다. 애플리케이션 매니페스트 파일의 이름은 실행 파일의 이름 뒤에 파일 이름 확장자 .manifest가 붙습니다. 예를 들어, MyApp.exe.manifest입니다. 다음 샘플 매니페스트는 첫 번째 섹션에서 매니페스트 자체를 설명한다는 것을 보여 줍니다. 다음 표에서는 매니페스트 설명 섹션에 있는 assemblyIdentity 요소에 의해 설정된 특성을 보여줍니다.
속성 | 묘사 |
---|---|
버전 | 매니페스트의 버전입니다. 버전은 major.minor.revision.build 형식이어야 합니다(즉, n.n.n.n, 여기서 n <=65535). |
프로세서 아키텍처 | 애플리케이션이 개발되는 프로세서입니다. |
이름 | 회사 이름, 제품 이름 및 애플리케이션 이름을 포함합니다. |
유형 | 애플리케이션의 유형을 입력하세요, 예를 들어 Win32. |
또한 샘플 매니페스트는 애플리케이션에 대한 설명을 제공하고 애플리케이션 종속성을 지정합니다. 다음 표에서는 종속성 섹션에 있는 assemblyIdentity 요소에 의해 설정된 특성을 보여줍니다.
속성 | 묘사 |
---|---|
유형 | Win32와 같은 종속성 구성 요소의 형식입니다. |
이름 | 구성 요소의 이름입니다. |
버전 | 구성 요소의 버전입니다. |
프로세서 아키텍처 | 구성 요소가 디자인된 프로세서입니다. |
공개키토큰 | 이 구성 요소에 사용되는 키 토큰입니다. |
언어 | 구성 요소의 언어입니다. |
다음은 매니페스트 파일의 예입니다.
중요하다
애플리케이션이 32비트 Windows 플랫폼을 대상으로 하는 경우 processorArchitecture 항목을 "X86" 설정하거나 애플리케이션이 64비트 Windows 플랫폼을 대상으로 하는 경우 "amd64" . 다음 예제와 같이 모든 플랫폼이 대상으로 지정되도록 "*"지정할 수도 있습니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity
version="1.0.0.0"
processorArchitecture="*"
name="CompanyName.ProductName.YourApplication"
type="win32"
/>
<description>Your application description here.</description>
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
</dependency>
</assembly>
Microsoft Visual C++ 2005 이상을 사용하는 경우 매니페스트를 수동으로 만드는 대신 소스 코드에 다음 컴파일러 지시문을 추가할 수 있습니다. 가독성을 위해 지시문은 여기에서 여러 줄로 나뉩니다.
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
다음 항목에서는 다양한 유형의 애플리케이션에 비주얼 스타일을 적용하는 단계를 설명합니다. 매니페스트 형식은 각 경우에 동일합니다.
표준 확장만 사용하는 애플리케이션에서 ComCtl32.dll 버전 6 사용
다음은 타사 확장을 사용하지 않는 애플리케이션의 예입니다.
- 계산기
- FreeCell(Windows Vista 및 Windows 7)
- Minesweeper(Windows Vista 및 Windows 7)
- 메모장
- 솔리테어(Windows Vista 및 Windows 7)
매니페스트를 만들고 애플리케이션에서 비주얼 스타일을 사용하도록 설정하려면
ComCtl32.lib에 연결하고 InitCommonControls호출합니다.
XML 매니페스트 형식이 있는 소스 트리에 YourApp.exe.manifest라는 파일을 추가합니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApplication" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
다음과 같이 애플리케이션의 리소스 파일에 매니페스트를 추가합니다.
CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "YourApp.exe.manifest"
메모
리소스에 이전 항목을 추가할 때 한 줄에 서식을 지정해야 합니다. 또는 애플리케이션의 실행 파일과 동일한 디렉터리에 XML 매니페스트 파일을 배치할 수 있습니다. 운영 체제는 먼저 파일 시스템에서 매니페스트를 로드한 다음 실행 파일의 리소스 섹션을 확인합니다. 파일 시스템 버전이 우선합니다.
애플리케이션을 빌드하면 매니페스트가 이진 리소스로 추가됩니다.
제어판 또는 RunDll32.exe 실행 중인 DLL에서 ComCtl32 버전 6 사용
매니페스트를 만들고 애플리케이션에서 비주얼 스타일을 사용하도록 설정하려면
ComCtl32.lib에 연결하고 InitCommonControls호출합니다.
XML 매니페스트 형식이 있는 소스 트리에 YourApp.cpl.manifest라는 파일을 추가합니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApplication" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
애플리케이션의 리소스 파일에 매니페스트를 리소스 ID 123으로 추가합니다.
메모
제어판 애플리케이션을 작성할 때 적절한 범주에 배치합니다. 제어판은 이제 제어판 애플리케이션의 분류를 지원합니다. 즉, 제어판 애플리케이션에 식별자를 할당하고 프로그램 추가 또는 제거, 모양 및 테마 또는 날짜, 시간, 언어 및 국가별 옵션과 같은 작업 영역으로 구분할 수 있습니다.
프로세스로 가져온 확장, 플러그 인, MMC 스냅인 또는 DLL에 비주얼 스타일 지원 추가
비주얼 스타일에 대한 지원은 확장, 플러그 인, MMC 스냅인 또는 프로세스로 가져온 DLL에 추가할 수 있습니다. 예를 들어 다음 단계를 사용하여 MMC(Microsoft Management Console) 스냅인에 대한 비주얼 스타일 지원을 추가합니다.
-DISOLATION_AWARE_ENABLED 플래그를 사용하여 스냅인을 컴파일하거나 #include "windows.h" 문 앞에 다음 문을 삽입합니다.
#define ISOLATION_AWARE_ENABLED 1
ISOLATION_AWARE_ENABLED에 대한 자세한 내용은 구성 요소 격리을 참조하십시오.
스냅인 소스에 공통 컨트롤 헤더 파일을 포함합니다.
#include <commctrl.h>
XML 매니페스트 형식을 사용하는 원본 트리에 YourApp.manifest라는 파일을 추가합니다.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="*" name="CompanyName.ProductName.YourApplication" type="win32" /> <description>Your application description here.</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> </assembly>
스냅인의 리소스 파일에 매니페스트를 추가합니다. 확장, 플러그인 또는 프로세스에 가져온 DLL을 사용하는 애플리케이션에서 ComCtl32 버전 6을 사용하는 방법에 대한 자세한 내용은 리소스 파일에 매니페스트를 추가하는 방법에 대한 항목 및 항목을 참조하세요.
비주얼 스타일 끄기
다음과 같이 SetWindowTheme 함수를 호출하여 컨트롤 또는 창의 모든 컨트롤에 대한 비주얼 스타일을 끌 수 있습니다.
SetWindowTheme(hwnd, L" ", L" ");
이전 예제에서 hwnd 비주얼 스타일을 사용하지 않도록 설정하는 창의 핸들입니다. 호출 후 컨트롤은 비주얼 스타일 없이 렌더링됩니다.
HTML 콘텐츠와 함께 비주얼 스타일 사용
배경 또는 테두리와 같은 CSS(Cascading Style Sheets) 속성을 수정하는 HTML 페이지에는 비주얼 스타일이 적용되지 않습니다. 지정된 CSS 특성을 표시합니다. 콘텐츠의 일부로 지정된 경우 대부분의 CSS 속성은 비주얼 스타일이 적용된 요소에 적용됩니다.
기본적으로 시각적 스타일은 Microsoft Internet Explorer 6 이상 버전에 표시된 페이지의 기본 HTML 컨트롤에 적용됩니다. HTML 페이지의 비주얼 스타일을 해제하려면 <head>
섹션에 META 태그를 추가합니다. 이 기술은 HTA(HTML 애플리케이션)로 패키지된 콘텐츠에도 적용됩니다. 비주얼 스타일을 해제하려면 META 태그는 다음과 같습니다.
<META HTTP-EQUIV="MSThemeCompatible" CONTENT="no">
메모
브라우저 설정과 태그 설정이 동의하지 않으면 페이지는 비주얼 스타일을 적용하지 않습니다. 예를 들어 META 태그가 "아니요"로 설정되어 있고 브라우저가 비주얼 스타일을 사용하도록 설정된 경우 비주얼 스타일이 페이지에 적용되지 않습니다. 그러나 브라우저 또는 META 태그가 "예"로 설정되어 있고 다른 항목이 지정되지 않은 경우 비주얼 스타일이 적용됩니다.
시각적 스타일은 콘텐츠의 레이아웃을 변경할 수 있습니다. 또한 단추 너비와 같은 기본 HTML 컨트롤에 특정 특성을 설정하는 경우 특정 비주얼 스타일에서 단추의 레이블을 읽을 수 없다는 것을 알 수 있습니다.
시각적 스타일을 사용하여 콘텐츠를 철저히 테스트하여 시각적 스타일을 적용하면 콘텐츠와 레이아웃에 부정적인 영향을 미치는지 확인해야 합니다.
비주얼 스타일이 적용되지 않는 경우
최상위 창에 비주얼 스타일을 적용하지 않도록 하려면 창에 null이 아닌 영역(SetWindowRgn)을 지정합니다. 시스템은 NULL이 아닌 영역이 있는 창이 비주얼 스타일을 사용하지 않는 특수 창이라고 가정합니다. 비주얼 스타일이 아닌 최상위 창과 연결된 자식 창은 부모 창이 아닌 경우에도 비주얼 스타일을 적용할 수 있습니다.
애플리케이션의 모든 창에 비주얼 스타일을 사용하지 않도록 설정하려면 SetThemeAppProperties 호출하고 STAP_ALLOW_NONCLIENT 플래그를 전달하지 않습니다. 애플리케이션이 SetThemeAppProperties를 호출하지 않으면, 가정되는 플래그 값은 STAP_ALLOW_NONCLIENT | STAP_ALLOW_CONTROLS | STAP_ALLOW_WEBCONTENT입니다. 가정된 값으로 인해 비클라이언트 영역, 컨트롤 및 웹 콘텐츠에 비주얼 스타일이 적용됩니다.
애플리케이션을 이전 버전의 Windows와 호환되도록 설정
대부분의 비주얼 스타일 아키텍처는 컨트롤의 모양 변경을 지원하지 않는 이전 버전의 Windows에서 제품을 계속 간편하게 배송할 수 있도록 설계되었습니다. 둘 이상의 운영 체제에 애플리케이션을 배송하는 경우 다음 사항에 유의하세요.
- Windows 8 이전 버전의 Windows에서는 고대비가 켜지면 비주얼 스타일이 꺼집니다. 고대비를 지원하려면 시각적 스타일을 지원하는 레거시 애플리케이션이 고대비에서 UI 요소를 제대로 그리기 위한 별도의 코드 경로를 제공해야 합니다. Windows 8에서 고대비는 비주얼 스타일의 일부입니다. 그러나 Windows 8 애플리케이션(애플리케이션 매니페스트의 호환성 섹션에 Windows 8 GUID를 포함하는 애플리케이션)은 이전 Windows 7에서 고대비로 올바르게 렌더링할 별도의 코드 경로를 제공해야 합니다.
- 타일 보기 또는 링크 컨트롤과 같은 ComCtl32.dll 버전 6의 기능을 사용하는 경우 사용자의 컴퓨터에서 해당 컨트롤을 사용할 수 없는 경우를 처리해야 합니다. ComCtl32.dll 버전 6은 재배포할 수 없습니다.
- 애플리케이션을 테스트하여 현재 버전을 먼저 확인하지 않고도 ComCtl32.dll 버전 6의 기능에 의존하지 않는지 확인합니다.
- UxTheme.lib에 연결하지 마세요.
- 시각적 스타일이 예상대로 작동하지 않는 경우 인스턴스에 대한 오류 처리 코드를 작성합니다.
- 이전 버전에서 애플리케이션의 매니페스트를 설치해도 컨트롤 렌더링에는 영향을 미치지 않습니다.
관련 항목