Pergunta

Eu estou tentando chamar a OpenThemeData (ver MSDN OpenThemeData ), mas eu não poderia determinar quais são os nomes de classe aceitáveis ??a serem passados ??pelo parâmetro pszClassList.

HTHEME OpenThemeData(      
    HWND hwnd,
    LPCWSTR pszClassList
);

Alguém poderia me quais são os nomes de classe aceitáveis ??dizer que eu posso passar para esse parâmetro? Obrigado!

Foi útil?

Solução

Você pode olhar em "AeroStyle.xml" como um cartaz anterior conhecida, o que dá uma lista exata para o Vista / Aero. No entanto, se você quiser jogar pelo seguro (e você provavelmente fazer) os nomes de classe devem, em geral, ser nomes de classe do Windows de controles comuns do Windows. Por exemplo, os botões e caixas de seleção usar o "Botão" nome da classe, o controle de edição "Edit", etc. I geralmente escolher o nome da classe do controle que está mais próximo a qualquer elemento personalizado que estou trabalhando é, e usar o dados temáticos para isso. Dessa forma você vai obter o código que funciona com o XP, Vista e (espero) Windows 7, independentemente do que tema selecionado do usuário realmente é.

No entanto, a menos que você usar matéria-Win32 muito, você provavelmente não fazer muito a criação de controle diretamente usando o nome da classe. Os nomes de classe são bastante generosamente espalhados por todo MSDN. Um bom lugar para começar é geralmente o arquivo "CommCtrl.h" a partir do Platform SDK, que tem um monte deles, e eles estão sempre descrito na ajuda do MSDN sobre os controles comuns individuais. Você também pode muitas vezes aprende-los olhando como os diálogos são definidos em arquivos .rc abrindo-os em um editor de texto:. Estes contêm o nome da classe para os controles

Outras dicas

O artigo Peças e Estados no MSDN contém uma tabela que mostra a classes de controle , partes e estados . Os valores da tabela são definidos no Vsstyle.h e Vssym32.h.

Aqui é uma referência rápida:

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

A resposta para a pergunta Temas Visuais Windows: galeria de peças e Unidos? fornece um "Partes e Estados Explorer" aplicação onde você pode navegar e testar a maioria dos estilos.

Os nomes de classe dependem do tema. Por exemplo, como a documentação para OpenThemeData estados :

Os nomes de classe para o tema Aero são definido em AeroStyle.xml, que é encontrado na pasta do Incluir Windows Software Development Microsoft Kit (SDK).

Eu sei que isto é uma questão de idade, mas eu quero dar uma resposta atualizada (2018) para aqueles que vêm aqui de Google.

A resposta aceita de DavidK diz para olhar para o arquivo " AeroStyle.xml " onde os temas são definidos. Este arquivo foi parte do Windows 7 SDK, mas foi removido do Windows 10 SDK, então a resposta aceite não é mais útil.

A resposta de ligações respingo para o MSDN , onde a lista de nomes temáticos, peças e estados é altamente incompetlete e não atualizado.

Os temas são atraídos pela Uxtheme.dll que lê as imagens e cores, etc. a partir do arquivo aero.msstyles na C:\Windows\Resources\Themes\Aero pasta no Windows 10.

Mas quando você abrir este arquivo em um editor hexadecimal que você não vai encontrar os nomes de todos os temas. Eu não sei se existe uma maneira para enumerar todos os nomes de classe tema existentes que podem ser passados ??para OpenThemeData(). Suponho que isso não é possível.

Mas o que eu sei com certeza é que no Windows 10 compilação 18282 Microsoft removeu o tema "Clock", que não é mais e um monte de temas sem documentos utilizados foram adicionados, como por exemplo: "TaskBand2CompositedSmallIconsVertical8Light::Taskband2", que é passada como classe tema nomear para OpenThemeData().

E também sei que vários temas só pode ser obtido se você passar o identificador de janela correta. Se você passar o identificador da janela errado, você pode ter outra alça tema que NULL esperado ou até mesmo.

Eu também sei que a Microsoft nos últimos 2 anos internamente mudou todo o seu código para uso OpenThemeDataForDpi() vez de OpenThemeData() porque cada monitor no Windows 10 pode ter uma resolução diferente.

O problema que nós temos aqui é uma grave falta de documentação no MSDN e da falta de uma função API para enumerar todos os temas availabe.

Não tem nada a ver com o Aero, que ainda não existe no XP! Ver o código fonte de OpenThemeData () ..

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top