Pregunta

Estoy intentando llamar a OpenThemeData (vea msdn OpenThemeData ), pero no pude determinar cuáles son los nombres de clase aceptables para ser pasados ??por el parámetro pszClassList .

HTHEME OpenThemeData(      
    HWND hwnd,
    LPCWSTR pszClassList
);

¿Podría alguien decirme cuáles son los nombres de clase aceptables que puedo pasar a ese parámetro? Gracias!

¿Fue útil?

Solución

Puedes buscar en " AeroStyle.xml " como se anotó en un póster anterior, que proporciona una lista exacta para Vista / Aero. Sin embargo, si desea jugar de forma segura (y probablemente lo haga), los nombres de las clases deberían ser, en general, nombres de clases de Windows de los controles comunes de Windows. Por ejemplo, los botones pulsadores y las casillas de verificación usan el nombre de clase " Button " ;, el control de edición " Edit " ;, etc. Generalmente, elijo el nombre de clase del control más cercano a cualquier elemento personalizado en el que esté trabajando, y Usa los datos del tema para eso. De esa manera, obtendrás un código que funciona con XP, Vista y (con suerte) con Windows 7, independientemente de lo que realmente sea el tema seleccionado del usuario.

Sin embargo, a menos que uses mucho Win32 en bruto, es probable que no controles mucho la creación directamente usando el nombre de la clase. Los nombres de las clases se distribuyen de forma bastante generosa en MSDN. Un buen lugar para comenzar suele ser el " CommCtrl.h " desde el Platform SDK, que tiene muchos de ellos, y siempre se describen en la ayuda de MSDN en los controles comunes individuales. Con frecuencia, también puede aprenderlos observando cómo se definen los cuadros de diálogo en los archivos .rc abriéndolos en un editor de texto: estos contienen el nombre de la clase de los controles.

Otros consejos

El artículo Partes y Los estados en MSDN contienen una tabla que muestra las clases de control , partes y estados . Los valores en la tabla se definen en Vsstyle.h y Vssym32.h .

Aquí hay una referencia 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

La respuesta a la pregunta Themes de Windows Visual: ¿Galería de partes y estados? proporciona una aplicación " Explorador de partes y estados " donde puede navegar y probar la mayoría de los estilos.

Los nombres de las clases dependen del tema. Por ejemplo, como se indica en la documentación de OpenThemeData :

  

Los nombres de clase para el tema Aero son   definido en AeroStyle.xml, que es   que se encuentra en la carpeta Incluir de la   Desarrollo de software de Microsoft Windows   Kit (SDK).

Sé que esta es una pregunta antigua, pero quiero dar una respuesta actualizada (2018) para aquellos que vienen aquí desde Google.

La respuesta aceptada de DavidK dice que se busque en el archivo " AeroStyle.xml " donde se definen los temas. Este archivo fue parte del SDK de Windows 7, pero se eliminó del SDK de Windows 10, por lo que la respuesta aceptada ya no es útil.

La respuesta de los enlaces de bienvenida a la MSDN donde la lista de nombres, partes y estados de los temas es altamente incompetente y no se actualiza.

Los temas se dibujan con UxTheme.dll que lee las imágenes y los colores, etc. del archivo aero.msstyles en la carpeta C: \ Windows \ Resources \ Themes \ Aero en Windows 10.

Pero cuando abre este archivo en un editor hexadecimal, no encontrará los nombres de todos los temas. No sé si hay una manera de enumerar todos los nombres de clase de tema existentes que se pueden pasar a OpenThemeData () . Supongo que esto no es posible.

Pero lo que sí sé es que en Windows 10 build 18282, Microsoft ha eliminado el tema " Reloj " que ya no se usa y se han agregado muchos temas no documentados como, por ejemplo: " TaskBand2CompositedSmallIconsVertical8Light :: Taskband2 " que se pasa como nombre de clase de tema a OpenThemeData () .

Y también sé que solo se pueden obtener varios temas si pasa el identificador de ventana correcto. Si pasa el identificador de la ventana incorrecta, puede obtener otro identificador de tema del esperado o incluso NULL .

También sé que Microsoft en los últimos 2 años ha cambiado internamente todo su código para usar OpenThemeDataForDpi () en lugar de OpenThemeData () porque cada monitor en Windows 10 puede tener una resolución diferente.

El problema que tenemos aquí es una grave falta de documentación en MSDN y la falta de una función de API para enumerar todos los temas disponibles.

No tiene nada que ver con Aero, ¡que incluso no existe en XP! Consulte el código fuente de OpenThemeData () ..

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top