문제

나는 openthemedata를 호출하려고합니다 (MSDN 참조 Openthemedata) 기능이지만 허용되는 클래스 이름이 무엇인지 판단 할 수 없었습니다. pszClassList 매개 변수.

HTHEME OpenThemeData(      
    HWND hwnd,
    LPCWSTR pszClassList
);

내가 그 매개 변수로 전달할 수있는 허용 가능한 클래스 이름이 무엇인지 말해 줄 수 있습니까? 감사!

도움이 되었습니까?

해결책

이전 포스터가 언급 한대로 "aerostyle.xml"을 볼 수 있으며 Vista/Aero의 정확한 목록을 제공합니다. 그러나 안전한 플레이를 원한다면 클래스 이름은 일반적으로 Windows 클래스 이름 공통 컨트롤의 Windows 클래스 이름이어야합니다. 예를 들어, 푸시 버튼과 확인란은 클래스 이름 "버튼", "편집"편집 "편집"등을 사용합니다. 일반적으로 작업중인 사용자 정의 요소에 가장 가까운 컨트롤의 클래스 이름을 선택하고 사용합니다. 이를위한 테마 데이터. 이렇게하면 사용자의 선택된 테마가 실제로 무엇인지에 관계없이 XP, Vista 및 (희망적으로) Windows 7과 함께 작동하는 코드를 얻을 수 있습니다.

그러나 Raw Win32를 많이 사용하지 않으면 클래스 이름을 사용하여 직접 제어 생성을 많이하지 않을 것입니다. 클래스 이름은 MSDN에 다소 자유롭게 뿌려집니다. 시작하기에 좋은 곳은 일반적으로 플랫폼 SDK의 "Commctrl.h"파일이며, 이들은 많은 것을 가지고 있으며, 항상 개별 공통 컨트롤에 대한 MSDN 도움말에 설명되어 있습니다. 또한 텍스트 편집기에서 대화를 열어서 .rc 파일에서 대화를 정의하는 방법을 살펴보면 종종 배울 수 있습니다. 여기에는 컨트롤의 클래스 이름이 포함되어 있습니다.

다른 팁

기사 부품 및 상태 MSDN에는 테이블이 포함되어 있습니다 제어 클래스, 부속, 그리고 . 테이블의 값은 정의됩니다 Vsstyle.h 그리고 Vssym32.h.

다음은 빠른 참조입니다.

BUTTON, CLOCK, COMBOBOX, COMMUNICATIONS, CONTROLPANEL, DATEPICKER, DRAGDROP, 
EDIT, EXPLORERBAR, FLYOUT, GLOBALS, HEADER, LISTBOX, LISTVIEW, MENU, MENUBAND, 
NAVIGATION, PAGE, PROGRESS, REBAR, SCROLLBAR, SEARCHEDITBOX, SPIN, STARTPANEL, 
STATUS, TAB, TASKBAND, TASKBAR, TASKDIALOG, TEXTSTYLE, TOOLBAR, TOOLTIP, 
TRACKBAR, TRAYNOTIFY, TREEVIEW, WINDOW

질문에 대한 답 Windows Visual Themes : 부품 및 상태 갤러리? a "부품 및 주 탐험가" 대부분의 스타일을 탐색하고 테스트 할 수있는 응용 프로그램.

클래스 이름은 테마에 따라 다릅니다. 예를 들어, 문서로 Openthemedata 상태 :

Aero 테마의 클래스 이름은 Aerostyle.xml에 정의되어 있으며 Microsoft Windows Software Development Kit (SDK)의 폴더에 있습니다.

나는 이것이 오래된 질문이라는 것을 알고 있지만 Google에서 온 사람들을 위해 업데이트 된 답변 (2018)을 제공하고 싶습니다.

Davidk의 허용 된 대답은 파일을 조사하겠다고 말합니다.aerostyle.xml"테마가 정의되는 경우.이 파일은 Windows 7 SDK의 일부이지만 Windows 10 SDK에서 제거되었으므로 허용 된 답변은 더 이상 유용하지 않습니다.

스플래시의 대답은 MSDN 테마 이름, 부품 및 상태의 목록이 고도로 소환되어 있고 업데이트되지 않은 경우.

테마는 그려집니다 uxtheme.dll 파일에서 이미지와 색상 등을 읽습니다. aero.msstyles 폴더에서 C:\Windows\Resources\Themes\Aero Windows 10에서.

그러나이 파일을 16 진 편집기에서 열면 모든 테마의 이름을 찾지 못합니다. 전달할 수있는 모든 기존 테마 클래스 이름을 열거하는 방법이 있는지 모르겠습니다. OpenThemeData(). 나는 이것이 불가능하다고 생각합니다.

그러나 내가 아는 것은 Windows 10 Build에서 18282 Microsoft가 테마를 제거했다는 것입니다. "Clock"더 이상 사용되지 않고 문서화되지 않은 테마가 많이 추가되었습니다."TaskBand2CompositedSmallIconsVertical8Light::Taskband2"테마 클래스 이름으로 전달됩니다 OpenThemeData().

또한 올바른 창 손잡이를 통과하는 경우에만 여러 테마를 얻을 수 있습니다. 잘못된 창의 핸들을 전달하면 예상보다 다른 테마 핸들을 얻을 수 있습니다. NULL.

또한 지난 2 년 동안 내부적으로 Microsoft가 사용하도록 모든 코드를 변경했음을 알고 있습니다. OpenThemeDataForDpi() 대신에 OpenThemeData() Windows 10의 각 모니터마다 다른 해상도가있을 수 있기 때문입니다.

우리가 여기에있는 문제는 MSDN의 문서가 심각하지 않다는 것입니다. 모든 가용 테마를 열거하는 API 기능이 부족하다는 것입니다.

XP에서 나가지 않는 Aero와는 아무 관련이 없습니다! OpenTheMedata ()의 소스 코드를 참조하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top