質問

OpenThemeDataを呼び出そうとしています(msdn OpenThemeData )関数ですが、 pszClassList パラメータによって渡される許容可能なクラス名を判断できませんでした。

HTHEME OpenThemeData(      
    HWND hwnd,
    LPCWSTR pszClassList
);

そのパラメーターに渡すことができる受け入れ可能なクラス名は誰か教えてもらえますか? ありがとう!

役に立ちましたか?

解決

" AeroStyle.xml"を見ることができます。前のポスターで述べたように、Vista / Aeroの正確なリストを示しています。ただし、安全にプレイしたい場合は(おそらくあなたもそうするでしょう)、クラス名は一般に、Windows共通コントロールのWindowsクラス名である必要があります。たとえば、プッシュボタンとチェックボックスは、クラス名「ボタン」、編集コントロール「編集」などを使用します。通常、作業中のカスタム要素に最も近いコントロールのクラス名を選択します。そのためにテーマデータを使用します。そうすれば、ユーザーが選択したテーマが実際に何であるかに関係なく、XP、Vista、および(できれば)Windows 7で動作するコードを取得できます。

ただし、生のWin32を頻繁に使用しない限り、おそらくクラス名を使用して直接コントロールを作成することはあまりありません。クラス名は、MSDN全体にかなり広く散らばっています。開始するのに適した場所は、通常「CommCtrl.h」です。それらの多くを備えたPlatform SDKからのファイル。それらは、個々の共通コントロールに関する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ビジュアルテーマ: Gallery of Parts and States?は、ほとんどのスタイルを参照およびテストできる" Parts and States Explorer" アプリケーションを提供します。

クラス名はテーマに依存します。たとえば、 OpenThemeData のドキュメントには、 :

  

Aeroテーマのクラス名は   AeroStyle.xmlで定義されています。   のインクルードフォルダーにあります   Microsoft Windowsソフトウェア開発   キット(SDK)。

これは古い質問であることは知っていますが、Googleからここに来た人のために更新された回答(2018)を提供したいと思います。

DavidKの受け入れられた回答では、ファイル" AeroStyle.xml "を調べます。テーマが定義されている場所。このファイルはWindows 7 SDKの一部でしたが、Windows 10 SDKから削除されたため、受け入れられた回答はもはや役に立ちません。

スプラッシュの回答は MSDN にリンクします。テーマ名、パーツ、状態のリストは非常に無能で更新されていません。

テーマは UxTheme.dll によって描画され、フォルダ C:\ Windows内のファイル aero.msstyles から画像や色などを読み取ります。 Windows 10の\ Resources \ Themes \ Aero

ただし、このファイルを16進エディタで開くと、すべてのテーマの名前が見つかりません。 OpenThemeData()に渡すことができる既存のすべてのテーマクラス名を列挙する方法があるかどうかはわかりません。これは不可能だと思います。

しかし、Windows 10ビルド18282でMicrosoftがテーマ" Clock "を削除したことは確かです。これはもう使用されておらず、たとえば、" TaskBand2CompositedSmallIconsVertical8Light :: Taskband2 "のようなドキュメント化されていないテーマが多数追加されています。テーマクラス名として OpenThemeData()に渡されます。

また、正しいウィンドウハンドルを渡した場合にのみいくつかのテーマを取得できることも知っています。間違ったウィンドウのハンドルを渡すと、予想とは異なる別のテーマハンドル、または NULL を取得する可能性があります。

また、過去2年間にMicrosoftがすべてのコードを内部的に変更して、Windows 10の各モニターが OpenThemeData()ではなく OpenThemeDataForDpi()を使用することを知っています解像度が異なります。

ここで問題になっているのは、MSDNのドキュメントの深刻な不足と、利用可能なすべてのテーマを列挙するAPI関数の不足です。

Aeroとは何の関係もありません。AeroはXPにも存在しません。 OpenThemeData()のソースコードを参照してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top